Firefox扩展:如何从加载覆盖中运行脚本

Firefox extension: how to get a script to run from a load overlay

本文关键字:覆盖 运行 脚本 加载 扩展 Firefox      更新时间:2023-09-26

我已经加载了扩展,并且能够在底部显示状态。我尝试将以下代码添加到chrome.manifest文件中:

chrome.manifest:
content     sample    chrome/content/
overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul

然后在sample.xul中,我有以下内容:

sample.xul:
<?xml version="1.0"?>
<overlay id="sample" 
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <statusbar id="status-bar" hidden="false">
  <statusbarpanel id="my-panel" label="Hello, World v2"  />
 </statusbar>
<menubar id="main-menubar">
  <menu label="Jeff" insertbefore="tools-menu">
    <menupopup>
      <menuitem label="About"/>
    </menupopup>
  </menu>
</menubar>

<script src="onloadoverlay.js"/> 
</overlay>

我添加了菜单栏和状态栏,以确保覆盖可以正常工作(到目前为止)。因此,理论上,以下代码应该在浏览器启动时从"onloadoverlay.js"加载,因此应该在页面加载时继续加载:

onloadoverlay.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);

请告诉我,如果我在这件事上完全错了,或者我错过了一些简单的事情。我已经通过谷歌和一些扩展创建演练和其他信息达到了这一点。到目前为止,我预计代码会在页面加载时弹出。

非常感谢您的帮助

-Jeff

将脚本标记的src属性更改为chrome://sample/content/onloadoverlay.js