Jak mogę zamknąć Firefoksa za pomocą wiersza polecenia w systemie Windows, nie zmuszając go?

2

Chcę wyjść z Firefoksa z wiersza poleceń, nie „zmuszając” go. Chcę po prostu spowodować to samo, co kliknięcie Quit w menu Firefox.

Wydaje mi się, że muszę jakoś nazwać „goQuitApplication” w oparciu o następujące.

Próbowałem utworzyć plik XUL i uruchomić go, ale wystąpił błąd. Próbowałem uruchomić plik z tego postu Mozillazine , ale Firefox powiedział w konsoli, że „TypeError: Components.classes jest niezdefiniowany”.

Oto kod tego pliku 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>

Próbowałem po prostu wywołać „goQuitApplication” w funkcji ładowania (która najwyraźniej działa, jeśli wywoływana jest w konsoli przeglądarki), ale potem dostałem błąd „ReferenceError: goQuitApplication nie jest zdefiniowany”.

Czy ktoś zna dobry sposób na zamknięcie Firefoksa z wiersza poleceń bez wymuszania zabicia procesu lub zamykania poszczególnych okien?

Matthias
źródło
Czy sprawdziłeś, czy Taskkill lub jego odpowiednik Powershell, Stop-Process , był odpowiedni dla twoich potrzeb?
Doktoro Reichard
kiedy wywołuję TASKKILL / im firefox.exe, firefox wydaje się działać tak, jakbym zamknął ostatnio używane okno firefox (pytając, czy naprawdę chcę zamknąć <# kart otwartych w tym oknie>), zamiast po prostu wyjść.
Matthias
1
Takie jest oczekiwane zachowanie domyślnej instalacji Firefoksa. Zawsze możesz wyłączyć to potwierdzenie, wybierając Opcje> Karty - „Ostrzegaj przy zamykaniu wielu kart”.
Doktoro Reichard
tak, zdaję sobie z tego sprawę. Problem polega na tym, że korzystam z wielu okien, a to zamyka tylko jedno z nich. ponadto zakładki są wtedy uważane za „zamknięte”, więc nie będą wracać następnym razem, gdy otworzysz Firefoksa.
Matthias
Pytanie to, co lubi robić Firefox. Jeśli nie chcesz, aby Firefox zadawał to pytanie, próbujesz zmusić Firefoksa do zamknięcia bez wykonywania standardowych czynności. Jednak w tym pytaniu SuperUser.com wyraźnie powiedziałeś „bez zmuszania”. Musisz więc podjąć decyzję: czy chcesz wymusić, czy nie?
TOOGAM

Odpowiedzi:

2

Wczoraj wpadłem na to pytanie. Sam szukałem odpowiedzi. Nie jest to wielka sprawa, jeśli masz tylko jedno otwarte okno (prosta linia zadań bez znaku / f, aby przeglądarka mogła się zamknąć), ale gdy tylko masz dwa okna lub więcej, staje się to znacznie bardziej skomplikowane, ponieważ polecenie taskkill będzie tylko strzelał jedno okno na raz (efektywnie tracąc zakładki okna, chyba że jest to ostatnie do zamknięcia).

Skończyło się na napisaniu zestawu skryptów cmd / vbs w celu czystego zamknięcia Firefoksa. Skrypty wykrywają, czy monit o hasło główne jest otwarty i zamyka go (unikaj zakłócania skryptu FFQuit), skrypt FFQuit następnie aktywuje FF i wysyła naciśnięcie klawisza Alt-F, aby otworzyć menu pliku i X, aby wyjść z Firefoksa.

Tam masz szybkie i czyste wyjście, wszystkie okna wracają po ponownym uruchomieniu. Istnieje również opcja ponownego uruchomienia FF (po prostu odkomentuj odpowiednią sekcję):

Część 1: enkapsulujący skrypt 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

Część 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

Część 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
thebunnyrules
źródło
Wiem, że minęło kilka lat, ale dzięki za to. Nie mam włączonego hasła głównego, więc tak naprawdę potrzebowałem tylko pliku VBS. Ale działa pięknie. Zaoszczędził mi sporo bólu głowy.
spoko
To całkiem miłe, że coś, co postawiłem kilka lat temu, pomaga dziś komuś. Dziękuję za opinię. :)
thebunnyrules
1
Uwielbiam ponadczasowość interwebs.
spoko