2013-04-07 3 views
0
var win = window.open('cover.html','','height=50,width=150,titlebar=no,toolbar=no'); 
win.onbeforeunload = function(){ updateIcon();}; 

V.S.Какая разница в использовании этих двух javascript?

chrome.windows.create(
    { 
    url: "cover.html", 
    type: "popup", 
    width: 150, 
    height: 50 
    }, 
    function(win) 
    { win.onbeforeunload = function(){ updateIcon();}; } 
); 

Функция updateIcon() не вызывается в хромированной версии API. Интересно, почему. Оба фрагмента кода тестируются на ubuntu linux.

+0

Согласно https://developer.chrome.com/extensions/windows.html#method-create, параметр 'win' в обратном вызове является объектом Window, описанным на этой странице, вместо объекта JavaScript' window' , Вы можете использовать 'chrome.extension.getViews' (https://developer.chrome.com/extensions/extension.html#method-getViews), чтобы получить объект JavaScript' window', если вы создадите всплывающее окно со вторым фрагментом. –

+0

спасибо, но chrome.extension.getViews не работает. Решение, которое я нашел, находится здесь: http://stackoverflow.com/questions/2315863/does-onbeforeunload-event-trigger-for-popup-html-in-a-google-chrome-extension – oohtj

ответ

0

Как услужливо объяснил в a comment:

chrome.windows.create возвращает другой тип окна: в API Chrome Window object. Он не дает вам доступ к объекту открытого документа, который находится в window.

Если вам нужно определить, когда окно закрыто с открытой стороны, вы можете прослушивать chrome.windows.onRemoved event и сравнить идентификатор окна с тем, который вы получили от create.

Если вы решили подключить в unload случае документа, вы можете сделать это из кода cover.html «s

Вы можете использовать chrome.extensions.getViews - но учтите, что вы должны запросить для type : "tab" и не "popup" - последний относится только к Browser/Page Action popups, а не к обычным страницам, открытым в всплывающем окне. Я знаю, что это сбивает с толку.

Вы упомянули, что нашли решение для закрытия сигнала на странице фона using runtime.getBackgroundPage. В качестве одного из альтернативных методов я могу предложить opening a Port на фоновой странице, которая затем может прослушивать событие разъединения на этом порту, которое будет срабатывать при закрытии окна.