【问题标题】:Firefox Compile Simple Load Script - browser.xulFirefox 编译简单加载脚本 - browser.xul
【发布时间】:2015-09-30 15:42:44
【问题描述】:

我正在尝试通过特权 chrome 向每个 dom 页面添加一个脚本标签,到目前为止,我能够获得一个选项卡的第一个页面加载,但在那之后,脚本什么也不做,我正在使用 Firefox Nightly 44.0。我做错了什么???

我正在关注的文档:

https://developer.mozilla.org/en-US/Add-ons/Code_snippets/On_page_load https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Intercepting_Page_Loads

mozilla-central/browser/base/content/browser.xul(第 74 行)

<script type="application/x-javascript" src="chrome://browser/content/yyy/x.js" />

chrome://browser/content/yyy/x.js

var myExtension = {
    init: function() {
        // The event can be DOMContentLoaded, pageshow, pagehide, load or unload.
        if(gBrowser) gBrowser.addEventListener("DOMContentLoaded", this.onPageLoad, false);
    },
    onPageLoad: function(aEvent) {
        var doc = aEvent.originalTarget; // doc is document that triggered the event
        var win = doc.defaultView; // win is the window for the doc
        // test desired conditions and do something
        // if (doc.nodeName != "#document") return; // only documents
        // if (win != win.top) return; //only top window.
        // if (win.frameElement) return; // skip iframes/frames
        alert("page is loaded \n" +doc.location.href);
    }
}
window.addEventListener("load", function load(event){
    window.removeEventListener("load", load, false); //remove listener, no longer needed
    myExtension.init();  
},false);

mozilla-central/browser/base/jar.mn

content/browser/yyy/x.js            (content/yyy/x.js)

【问题讨论】:

    标签: firefox firefox-addon onload


    【解决方案1】:

    您需要使用 loadFrameScript 和 true 参数来收听以后的页面。以下是示例:https://github.com/mdn/e10s-example-addons/tree/master/run-script-in-all-pages

    globalMM.loadFrameScript("chrome://modify-all-pages/content/frame-script.js", true);
    

    这在此处记录:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFrameScriptLoader#loadFrameScript%28%29

    要阻止它在新标签中加载,您必须使用removeDelayedFrameScript

    该 github 链接还显示了如何使用 addon-sdk content-scripts 执行此操作的示例。

    【讨论】:

    • 谢谢!!!例如,我将接受您的回答.. 谢谢!谢谢!
    • Cool @Null :) 但如果你想使用内容脚本方法,你可以使用插件 sdk 或非 sdk,你可以在沙箱中使用执行:developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/…
    • 我也会研究一下,这些例子看起来像我需要的,但我会看看我想出什么。
    • 所以我让浏览器加载,即使没有沙箱(我不知道它是如何工作的),但我一直在使用附加 sdk,但你是说我可以添加globalMM.loadFrameScript("chrome://modify-all-pages/content/frame-script.js", true);到内容脚本?我以为我必须将其添加到附加脚本中?
    • @null 如果您使用的是插件 sdk,则不应使用框架脚本和消息管理器发送消息。创建 SDK 是为了将这些东西抽象出来。
    猜你喜欢
    • 2014-01-13
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多