我正在创建一个Firefox扩展。我想使用Firefox扩展加载我的外部js文件加载时间的所有网页。我可以在我的html文件中成功加载所有js文件加载事件。但是我如何执行我的扩展。
window.onload = load;
function load()
{
var filerefs=document.createElement('script')
filerefs.setAttribute("type","text/javascript")
filerefs.setAttribute("src", 'http://code.jquery.com/jquery-1.9.1.min.js')
var head = doc.getElementsByTagName( "head" )[ 0 ].appendChild( filerefs );
}
请指导我。
答案 0 :(得分:2)
如果你想检测页面加载而不是应用程序加载,你应该这样做(第一部分应该在你的主叠加文件中):
// do not try to add a callback until the browser window has
// been initialised. We add a callback to the tabbed browser
// when the browser's window gets loaded.
window.addEventListener("load", function (event) {
// Add a callback to be run every time a document loads.
// note that this includes frames/iframes within the document
gBrowser.addEventListener("load", load(event), true);
}, false);
来自here
的参考资料我将事件添加到load函数中,因为事件不仅会触发加载本身,还会触发其他元素,因此您必须验证您只执行了一次(引用here):< / p>
function load(event) {
if (event.originalTarget.nodeName == "#document") {
var htmlns = "http://www.w3.org/1999/xhtml";
var doc = gBrowser.selectedBrowser.contentDocument;
var filerefs = doc.createElementNS(htmlns,'script');
filerefs.setAttribute("type","text/javascript");
filerefs.setAttribute("src", "http://code.jquery.com/jquery-1.9.1.min.js");
doc.getElementsByTagName("head")[0].appendChild(filerefs);
}
}
我们必须定位页面的内容,而不是使用document.getElement ...,否则你将从你的插件中获取元素(使用gBrowser.selectedBrowser.contentDocument可以访问当前页面的dom)。在创建元素上,我们想要创建html元素,因此您可以定义和使用html命名空间(引用here)。
这应该可以解决问题: