Я разрабатываю загрузочный Firefox-аддон. В моей startup
функции Я построения нового экземпляра объекта, который создает новое окно Firefox со следующим кодом:XUL/Firefox: создать новое окно браузера при загрузке аддона
function createWindow (cb) {
const appHiddenWindow = Services.appShell.applicationProvidedHiddenWindow
, hidden = Services.appShell.hiddenDOMWindow;
// For definition of OpenBrowserWindow() see
// http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js
// Prior to Firefox 20 "private" option is silently ignored
let parent = appHiddenWindow ? hidden : RecentWindow.getMostRecentBrowserWindow()
, window = parent.OpenBrowserWindow({ private: true });
window.addEventListener("load", onWindowLoad);
return window;
function onWindowLoad (e) {
window.removeEventListener("load", onWindowLoad);
window.gBrowser.addEventListener("pageshow", onPageShow);
}
function onPageShow (e) {
dump("onPageShow\n");
try {
cb(window);
} catch (e) {}
}
}
по неизвестной для меня причинам этот код ведет себя по-разному в разных условиях: на Firefox срок до 20, если он выполняется при запуске приложения, onPageShow
callback никогда не срабатывает. Я предполагаю, что это потому, что gBrowser
selectedBrowser
просто не загружает главную страницу и останавливается после загрузки about:blank
. Почему он загружает главную страницу в новом окне, когда я повторно активирую мое расширение вручную (когда Firefox уже загружен)?
Проблема возникает, когда она загружает домашнюю страницу в selectedBrowser
(в новых версиях Fx): в этом случае он не загружает URL-адрес, указанный мной, и вместо этого продолжает загружать мою домашнюю страницу.
Так как я могу определить, будет ли gBrowser
собираться загрузить домашнюю страницу или нет? И почему это происходит по-разному при запуске приложения и при повторной активации аддона?
PS: Для приведенной выше коды для работы нужно сделать эти import
с и использовать следующий запасной вариант:
Cu.import("resource://gre/modules/Services.jsm");
try {
Cu.import("resource:///modules/RecentWindow.jsm");
} catch (e) { // Firefox prior to v20
var RecentWindow = {
getMostRecentBrowserWindow: function()
Services.wm.getMostRecentWindow("navigator:browser")
};
}
Я нахожусь в Mac OS, если это имеет значение. – nilfalse
Почему вы не следуете более традиционному пути добавления слушателя к оконному медиатору? – paa
В моем приложении мне нужно мое собственное (дополнительное) окно, которое открывается самим аддоном. Это окно будет работать в фоновом режиме. В случае использования оконного посредника мне нужно будет открыть новое окно вручную, правильно ли я понял? – nilfalse