2

Я хочу выйти из Firefox из командной строки, не "форсируя" его. Я просто хочу вызвать то же самое, что и нажатие кнопки "Выйти" в меню в Firefox.

Кажется, мне нужно как-то вызвать goQuitApplication, основываясь на следующем.

Я попытался создать файл xul и запустить его, но у меня возникла ошибка. Я попытался запустить файл из этого поста в Mozillazine, но Firefox сказал в консоли, что «TypeError: Components.classes не определен».

Ниже приведен код этого файла 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>

Я попытался просто вызвать "goQuitApplication" внутри функции загрузки (которая, по-видимому, работает, если вызывается из консоли браузера), но затем я получил ошибку «ReferenceError: goQuitApplication не определено».

Кто-нибудь знает хороший способ выхода из Firefox из командной строки, без принудительного завершения процесса или закрытия отдельных окон?

1 ответ1

2

Я на самом деле столкнулся с этим вопросом вчера. Я искал ответ сам. Ничего страшного, если у вас открыто только одно окно (простая строка taskkill без /f, чтобы браузер мог корректно закрываться), но как только у вас будет два или более окон, это станет намного сложнее, потому что команда taskkill будет только снимать по одному окну за раз (эффективно теряет вкладки окна, если оно не закрыто последним).

Я закончил тем, что написал комбо сценариев cmd/vbs, чтобы аккуратно закрыть firefox. Сценарии обнаружат, открыта ли подсказка мастер-пароля, и закроют ее (избегайте вмешательства подсказки сценария FFQuit), затем сценарий FFQuit активирует FF и отправит нажатие клавиши Alt-F для открытия меню файла и X для выхода из firefox.

Там у вас есть быстрый и чистый выход, все окна возвращаются при перезагрузке. Также есть возможность перезапустить FF (просто раскомментируйте соответствующий раздел):

Часть 1: инкапсулирующий скрипт cmd: 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

Часть 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

Часть 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .