2012-11-03 8 views
6

Opracowuję rozszerzenie przeglądarki Chrome i chciałem się dowiedzieć, czy można zamknąć wyskakujące okienko, klikając ponownie ikonę, która umożliwia otwarcie wyskakującego okienka: próbowałem wszystko, ale wygląda na to, że musisz kliknąć gdzie indziej, aby je zamknąć. Dokument stwierdza, że ​​zdarzenie onClicked jest:Zamknij wyskakujące okienko rozszerzenia Chrome, ponownie klikając ikonę akcji przeglądarki

Zostaje uruchomione po kliknięciu ikony akcji przeglądarki. To zdarzenie nie zostanie wywołane, jeśli działanie przeglądarki ma wyskakujące okienka: (http://developer.chrome.com/extensions/browserAction.html#popups).

Z góry dziękuję.

[UPDATE] Próbowałem następujące i działa pół (!): 1. w popup.html połączyć popup.js; 2. popup.js odczytuje wartość zmiennej zawartej w background.js;

var currentStatus = chrome.extension.getBackgroundPage().open; 
if(currentStatus==0){ 
    chrome.extension.getBackgroundPage().open=1; 
}else{ 
    chrome.extension.getBackgroundPage().open=0; 
    window.close(); 
} 

Co się dzieje: pierwsze kliknięcie otwiera aplikację, drugi zamyka go, ale pozostaje mikro okienko bez zawartości na ikonie. Jeśli usunę to, osiągnąłem swój cel.

+1

gorąco polecam wybrać inny obiekt niż 'open', bo jesteś teraz nadpisanie wbudowaną funkcję' window.open' strony tła. –

+0

@Rob W: Usunąłem cały ten kod, ponieważ nie mogłem znaleźć żadnego sposobu na poprawne działanie. Dzięki za komentarz! – ContentiousMaximus

+1

Wygląda na to, że w Chrome 28 kliknięcie ikony akcji przeglądarki po raz drugi zamknie wyskakujące okienko, bez specjalnego kodu. –

Odpowiedz

3

Zdarzenie onClicked jest wywoływane, jeśli działanie przeglądarki rozszerzenia nie definiuje w manifeście default_popup. Ta notatka z dokumentacji nie dotyczy tego, czy popup jest aktualnie otwarty.

Jeśli manifest definiuje default_popup, ponowne kliknięcie przycisku zamyka i ponownie otwiera wtyczkę. Mousedown zamyka się i otwiera się mouseup. (Więc klikając na przycisk i przeciągając się i zwalniając mysz ma zamknąć okienko, że nie każdy powinien to zrobić.)

zalecam ustawienie default_popup i dokonywania przycisk w HTML dla popup, który zamyka okienko z window.close; lub znajdź punkt w wyskakującym okienku wyskakującym, w którym zamykanie ma sens.

1

Cóż, minęło dużo czasu, a problem/błąd nadal występuje w przeglądarkach Chrome. Znalazłem obejście, nie jest świetne, ale robi to, czego potrzebuję - zamyka okno po drugim kliknięciu ikony. Oto co zrobiłem w popup javascript file:

if(localStorage.getItem('firstClick')==='true'){ 
    localStorage.setItem('firstClick', 'false'); 
    window.close(); 
} 
else { 
    localStorage.removeItem('firstClick'); 
    localStorage.set('firstClick', 'true') 
}