慕尼黑5688855
2019-08-02 16:39:33
如何使用jQuery公開IFrame的DOM?我有一個代表特定IFrame的原型。該原型有一個名為GoToUrl(...)的函數,用于打開IFrame中的給定URL。我的問題是:如何創建“InternalDOM”屬性并使此屬性引用IFrame里面的“窗口”對象(根DOM對象)?以這種方式:如果我的IFrame公開了一個頁面,其中有一個對象X的“窗口”對象,我可以這樣做:MyFrameObject.GoToUrl(pageXurl);MyFrameObject.InternalDOM.X任何幫助,將不勝感激。PS:我會接受不一定與jQuery相關的答案,但我更喜歡jQuery解決方案。
3 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
要獲取window
幀的對象,您可以使用該window.frames
數組:
var iframewindow= frames['iframe_name'];
這要求你提供<iframe>
一個舊學校的name
屬性,而不是像id
?;蛘撸绻阒理撁嫔蟟frame的順序,你可以用數字索引它們:
var iframewindow= frames[0];
從DOM中的iframe元素獲取iframe窗口通常更靈活,但這需要一些兼容性代碼來處理IE:
var iframe= document.getElementById('iframe_id');var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;
jQuery的定義內容()方法來獲取document
節點,但它不會給你一個跨瀏覽器的方式從去document
到window
,所以你還是堅持了:
var iframe= $('#iframe_id')[0];var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;
這不是一個真正的大勝利。
(注意:使用jQuery進行跨框架腳本時要非常小心。每個框架需要自己的jQuery副本,一個框架副本的方法不一定適用于另一個框架的節點。跨框架腳本是一個充滿主題的主題陷阱。)

呼如林
TA貢獻1798條經驗 獲得超3個贊
把它們加起來
從父頁面訪問iframe內容
var iframe = $('iframe').contents(); // iframe.find('..') ...
從iframe訪問父頁面內容
var parent = $(window.parent.document); // parent.find('..') ...
僅當父頁面和iframe頁面位于同一域時才適用。
編輯:在加載子iframe示例:
父html
<iframe id="iframe1" src="iframe1.html"></iframe><iframe id="iframe2" src="iframe2.html"></iframe>
父母js
$(function () { var iframe1 = null, iframe2 = null; // IE8/7 var frameInterval = window.setInterval(function () { iframe1 = $('#iframe1').contents(); iframe2 = $('#iframe2').contents(); if ($('head', iframe1).length && $('head', iframe2).length) { window.clearInterval(frameInterval); } }, 100); // on iframe loaded $('#iframe1').on('load', function (e) { iframe1 = $('#iframe1').contents(); }); $('#iframe2').on('load', function (e) { iframe2 = $('#iframe2').contents(); });});
包括IE9在內的所有主流瀏覽器都使用這些on('load')
線路。只有IE8 / 7需要間隔塊。

繁華開滿天機
TA貢獻1816條經驗 獲得超4個贊
var frames = window.frames || window.document.frames;
用于iframe中的窗口。
frames["myIframeId"].window
用于iframe中的文檔
frames["myIframeId"].window.document
對于iframe中的身體
frames["myIframeId"].window.document.body
用jquery在iframe中的body
var iframeBody = $(frames["myIframeId"].window.document).contents().find("body");
重要提示:您應始終檢查文檔的狀態是否為“完成”,以便使用此文檔
if (frames["myIframeId"].window.document.readyState=="complete"){ //ok}else{ //perform a recursive call until it is complete}
添加回答
舉報
0/150
提交
取消