我正在使用firefox扩展,它使用类似的东西:
function myExt()
{
this.handleEvent = function (event)
{
switch (event.type)
{
case "DOMContentLoaded":
{
alert('fired');
}
}
}
window.addEventListener ("DOMContentLoaded", this, false);
}
我的问题是,如果页面内容是iframe,警报会多次执行,所以我要做的是,在this.handleEvent 上使用“event”我需要查明event.target是否引用了顶部窗口或iframe窗口。
我该怎么做?
答案 0 :(得分:0)
是的,iframe
很奇怪,会引发DOMContentLoaded
。它将内容视为自己的“窗口”。您是否尝试过event.target
的父母或ownerDocument
?
我在加载到<object>
标记中的SVG上使用了Firebug,我相信ownerDocument
可以获得您想要的内容。
答案 1 :(得分:0)
我仍在进行一些测试,但看起来这个功能可以完成这项任务:
this.isTopLevel = function(event){
var doc = event.target;
for(var i = 0; i < gBrowser.browsers.length; i++) {
if(gBrowser.browsers[i].contentDocument == doc) return true;
}
return false;
};
答案 2 :(得分:0)
您可以尝试检查event.target.frameElement。如果它是未定义的那么它是主文档,但如果它被定义则它是一个框架。我不记得这是否仅适用于帧,或者是否也适用于iframe。
答案 3 :(得分:0)
我正在使用此代码段过滤掉iframe:
var browser = gBrowser.getBrowserForDocument(event.target);
var pageIsFrame = (event.target instanceof Ci.nsIDOMHTMLDocument &&
event.target != browser.contentDocument);
if (pageIsFrame) {
// Not interested in frames.
return;
}
您需要Chrome权限。
在新的附加SDK内容脚本中(您没有Chrome权限),我使用的是:
if (window.frameElement) {
// This is an iframe.
//...
}