Например, вы могли бы использовать:
var mainWindow = window
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
mainWindow.getBrowser().addEventListener("DOMContentLoaded",
your_function, false);
Но, дело в том, что вам нужно добавить слушателя в браузер, а не окна.
EDIT
См https://developer.mozilla.org/En/Code_snippets/Tabbed_browser для получения информации о доступе к веб-браузер из разных контекстов, а также некоторые другие полезные данные.
EDIT
Просто, чтобы добавить немного больше деталей ....
function your_function(event) {
if (event.originalTarget instanceof HTMLDocument) {
var doc = event.originalTarget;
// if it's just a frame element, then return and wait for the
// main event to fire.
if (event.originalTarget.defaultView.frameElement)
return;
// now you can use doc.location however you want
}
}
Обратите внимание, что это будет реагировать на страницы открыты в любой вкладке, а не вкладка специфичны.
Для конкретной вкладки, вы можете использовать что-то вроде этого:
var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.addTab("http://www.google.com/"));
newTabBrowser.addEventListener("load", function() {
newTabBrowser.contentDocument.body.innerHTML = "<div>hello world</div>";
}, true);
выше добавляет новую вкладку, а затем добавляет слушатель. Однако для всех вкладок вам потребуется что-то вроде следующего. Затем добавьте прослушиватель событий «DOMContentLoaded» на каждой вкладке при добавлении (и удалите при закрытии).
Вы также можете посмотреть: https://developer.mozilla.org/En/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed и https://developer.mozilla.org/En/Code_snippets/Tabbed_browser#Getting_document_of_currently_selected_tab
(для сохранения)
function exampleTabAdded(event) {
var browser = gBrowser.getBrowserForTab(event.target);
// browser is the XUL element of the browser that's been added
}
function exampleTabMoved(event) {
var browser = gBrowser.getBrowserForTab(event.target);
// browser is the XUL element of the browser that's been moved
}
function exampleTabRemoved(event) {
var browser = gBrowser.getBrowserForTab(event.target);
// browser is the XUL element of the browser that's been removed
}
// During initialisation
var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", exampleTabAdded, false);
container.addEventListener("TabMove", exampleTabMoved, false);
container.addEventListener("TabClose", exampleTabRemoved, false);
// When no longer needed
container.removeEventListener("TabOpen", exampleTabAdded, false);
container.removeEventListener("TabMove", exampleTabMoved, false);
container.removeEventListener("TabClose", exampleTabRemoved, false);
Это вы должны получить 99% пути.
Спасибо Джонатан. Функция, которую вы написали, кажется правильной, но проблема в том, что при загрузке pdf событие DOMContentLoaded не срабатывает, поэтому ни остальная часть кода ... Лучшим решением должно быть добавление eventListener к некоторому элементу браузера, который управляет URL-адресом, но я понятия не имею, как –
событие DOMContentLoaded запускается только для типов MIME, имеющих DOM (например,HTML, или XUL). Вы специально хотите слушать загружаемый PDF-файл? из определенного домена? Вы можете посмотреть https://developer.mozilla.org/en/Observer_Notifications и, в частности, 'http-on-study-response'. А также см. Http://www.ashita.org/howto-xhr-listening-by-a-firefox-addon/ для примера обработки уведомлений наблюдателя. –
Спасибо, Джонатан, вы меня поймаете правильно. Теперь с http-on-study-response я могу получить события из запроса страницы и проверить, изменился ли URL-адрес страницы, и, конечно же, он работает также с pdf. Но я должен проверить историю и назад, потому что они не делают HTTP-запрос. Действительно, нет другого способа проверить только событие запроса страницы, например. событие, которое должно быть уволено, когда я пишу url на моем firefox navbar и нажмите enter ?! –