문제

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로 변환

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top