Como posso sair do Firefox via linha de comando no Windows sem forçá-lo?

2

Eu quero sair do Firefox pela linha de comando, sem "forçar" isso. Eu só quero fazer o mesmo que clicar em Sair no menu do Firefox.

Parece que preciso chamar "goQuitApplication" de alguma forma, com base no seguinte.

Eu tentei criar um arquivo xul e executá-lo, mas recebi um erro. Tentei executar o arquivo desta postagem da Mozillazine , mas o Firefox disse no console que " TypeError: Components.classes é indefinido ".

O seguinte é o código desse arquivo xul:

Remote XUL Manager by Jorge Villalobos
https://addons.mozilla.org/firefox/addon/235281/

Domains with remote XUL permission: <Local files>

Loads the specified chrome:
firefox -chrome example.xul

-->

<window onload="load()"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/javascript">
  <![CDATA[

    function load() {
      var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
        getService(Components.interfaces.nsIWindowMediator);
      var win = wm.getMostRecentWindow("navigator:browser");
      win.setTimeout("goQuitApplication()", 250);
      window.close();
    }

  ]]>
  </script>

</window>

Eu tentei simplesmente chamar "goQuitApplication" dentro da função load, (que aparentemente funciona se chamado dentro do console do navegador) mas depois recebi o erro "ReferenceError: goQuitApplication não está definido".

Alguém sabe de uma boa maneira de sair do Firefox a partir da linha de comando, sem forçar a eliminação do processo ou fechar janelas individuais?

    
por Matthias 01.05.2014 / 18:36

1 resposta

2

Eu realmente me deparei com essa questão ontem. Eu estava procurando a resposta sozinho. Não é grande coisa se você tiver apenas uma janela aberta (uma simples linha de tarefa sem o / f para que o navegador possa fechar de forma limpa) mas assim que você tiver duas janelas ou mais, ela se torna mais complicada porque o comando taskkill só disparou uma janela de cada vez (perdendo efetivamente as abas da janela a menos que seja a última a ser fechada).

Acabei escrevendo uma combinação de scripts cmd / vbs para fechar o Firefox de maneira limpa. Os scripts detectarão se o prompt da Senha Mestra está aberto e fechá-lo (evite que o aviso interfira no script FFQuit), o script FFQuit ativará FF e enviará um toque de tecla Alt-F para abrir o menu Arquivo e um X para sair do Firefox.

Lá você tem uma saída rápida e limpa, todas as janelas voltam ao reiniciar. Há a opção de reiniciar o FF também (apenas desmarque a seção relevante):

Parte 1: o script cmd de encapsulamento: quitFF.cmd

set FFexec=%programfiles(x86)%\Mozilla Firefox\firefox.exe
set ERRORLEVEL=

:: Check if that annoying Master Password prompt is open and close it
tasklist /FI "WINDOWTITLE eq Password Required" 2>NUL | find /I /N firefox.exe">NUL
IF "%ERRORLEVEL%"=="0" MPWDclose.vbs

FFQuit.vbs

::Optional Restart Firefox - ping is just a sneaky way of getting sleep functionality
::Uncomment REM to activate
REM ping 1.0.0.0 -n 1 -w 2000 > nul
REM start ""  "%FFexec%" & exit

Parte 2: MPWDclose.vbs

Set MPWDclose = WScript.CreateObject("WScript.Shell")

WScript.Sleep 250
MPWDclose.AppActivate("Password Required")
WScript.Sleep 250
MPWDclose.Sendkeys "{ESC}"
WScript.Sleep 50
WScript.Quit

Parte 3: FFQuit.vbs

Set FFquit = WScript.CreateObject("WScript.Shell")
WScript.Sleep 250
FFquit.AppActivate("- Mozilla Firefox")
WScript.Sleep 250
FFquit.Sendkeys "%F"
WScript.Sleep 100 
FFquit.Sendkeys "x"
WScript.Quit
    
por 02.04.2016 / 02:07