我花了很长时间尝试不同的工作来实现这一点,但没有任何事情和文档没有多大帮助。
我正在尝试在iframe中填充一个动态注入页面的表单。要注入那个iframe:
myObject.iframe = document.createElement("iframe");
myObject.iframe.setAttribute("src", data.url);
myObject.iframe.setAttribute("id","extension-iframe");
myObject.window.document.getElementById('publisher').appendChild(myObject.iframe);
myObject.iframe.addEventListener("load", function(){
myObject.populate(data);
}, false);
工作正常,并且DOES触发populate()方法。我的问题是获取该iframe的文档或窗口对象。我已经尝试了以下所有方法:
myObject.iframe.window
myObject.iframe.document
myObject.iframe.content
但这些都是未定义的。
我还尝试将事件对象传递给iframe的load事件侦听器,然后执行:
event.originalTarget
但这也不起作用。
我正在阅读以下文档:
但要么我不理解它,要么就是没有正确解释。
任何人都能解释一下吗?
谢谢!
答案 0 :(得分:3)
您是否尝试过使用contentWindow属性?
var doc = iframe.contentWindow.document;
答案 1 :(得分:1)
尝试myObject.iframe.contentDocument
有些事情如下:
// For accessing browser window from sidebar code.
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
var gBrowser = mainWindow.gBrowser;
var iframes = gBrowser.contentDocument.getElementsByTagName("iframe");
for (var i=0; i < iframes.length; i++) {
var check_elem = iframes[i].contentDocument.getElementById('myid');
if (check_elem) {
...;
}
}
答案 2 :(得分:1)
我正在传递事件对象然后event.originalTarget
(就像你提到的那样)并且它工作正常。虽然我必须将addEventListener的useCapture
参数设置为true才能调用我的事件。
因此,如果我理解正确,您需要在populate方法中访问文档......
我会将event.originalTarget
作为参数传递给您的方法
要么
在load事件中,我将设置示例myObject.document
属性,然后在populate方法中使用它。
myObject.iframe.addEventListener("load", function(event){
var doc = event.originalTarget;
myObject.populate(data,doc);
}, false);
答案 3 :(得分:0)
我差点遇到同样的问题。使用以下代码获取iframe(Firebug用于调试):
iframes = window.content.document.getElementsByTagName('iframe')
for (var i = 0; i < iframes.length; i++) {
var elmInput = iframes[i];
Firebug.Console.log(elmInput);
}