현재 브라우저 탭의 URL이 변경되었는지 확인하려면 어떻게해야합니까?
-
20-09-2019 - |
문제
Firefox 확장에 사용해야합니다. 나는 이미 시도했다 window.onload
이벤트 리스너, 현재 URL == Old URL인지 확인하고 좋은 생각이지만 페이지가 PDF를로드 할 때는 작동하지 않습니다.
해시가 기능이 변경된 것을 보았지만 Firefox 3.6에서만 작동합니다. 적어도 Firefox 3에서 일해야합니다.
그래서 나는 document.location
변화.
해결책
예를 들어 다음을 사용할 수 있습니다.
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);
그러나 요점은 청취자를 창이 아닌 브라우저에 추가해야한다는 것입니다.
편집하다
보다 https://developer.mozilla.org/en/code_snippets/tabbed_browser 다른 유용한 정보뿐만 아니라 다른 컨텍스트에서 브라우저에 액세스하는 방법에 대한 정보.
편집하다
좀 더 세부 사항을 추가하기 위해 ....
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_currenty_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%의 길을 얻을 것입니다.
다른 팁
을 추가하다 진보 청취자 탭 내부의 위치 변경을 모니터링합니다. Addon SDK가있는 표지 탭 Swithches.
리스너를 설치하려면 SDK 탭을 ViewFor를 사용하여 원시 (이전) 표현으로 변환하십시오. Modelfor 및 GetTabforContentWindow에서는 역전 변환이 가능합니다.
const tabs = require("sdk/tabs");
const {viewFor} = require('sdk/view/core');
const {modelFor} = require('sdk/model/core');
const {getBrowserForTab, getTabForContentWindow} = require("sdk/tabs/utils");
const {Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
var progressListener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
onLocationChange: function(aProgress, aRequest, aURI) {
var highLevel= modelFor(getTabForContentWindow(aProgress.DOMWindow));
console.log("onLocationChange ", highLevel.url);
}
};
tabs.on('open', function(newTab) {
var lowLevel = viewFor(newTab);
var browser = getBrowserForTab(lowLevel);
browser.addProgressListener(progressListener);
});
에서 영감을 받다Chrome Windows로 변환