簡體   English   中英

從Firefox擴展程序訪問iFrame的dom

[英]Accessing an iFrame's dom from a Firefox Extension

我花了很長時間嘗試各種不同的方法來使它起作用,但是什么也沒做,文檔沒有太大幫助。

我正在嘗試在動態插入頁面的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);

可以正常工作,並且確實觸發populate()方法。 我的問題是獲取該iframe的文檔或窗口對象。 我已經嘗試了以下所有方法:

myObject.iframe.window
myObject.iframe.document
myObject.iframe.content

但是這些都是不確定的。

我還嘗試將事件對象傳遞給該iframe的load事件監聽器,然后執行以下操作:

event.originalTarget

但這也不起作用。

我正在閱讀以下文檔:

但是,要么我聽不懂,要么就沒有正確解釋。

誰能闡明一些想法?

謝謝!

您是否嘗試過使用contentWindow屬性?

var doc = iframe.contentWindow.document;

試試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) {
                    ...;
                }
            }

我先傳遞事件對象,然后event.originalTarget (如您所述),它工作正常。 盡管我必須將addEventListener的useCapture參數設置為true才能調用我的事件。

因此,如果我理解正確,則需要使用填充方法來訪問文檔...

我會將event.originalTarget作為參數傳遞給您的方法,或者在加載事件中,我將設置例如myObject.document屬性,然后在填充方法中使用它。

myObject.iframe.addEventListener("load", function(event){
    var doc = event.originalTarget;
    myObject.populate(data,doc);
}, false);

我幾乎有同樣的問題。 使用以下代碼可使我獲得iframe(Firebug用於調試):

iframes = window.content.document.getElementsByTagName('iframe')
for (var i = 0; i < iframes.length; i++) {
  var elmInput = iframes[i];
  Firebug.Console.log(elmInput);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM