亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用jQuery公開IFrame的DOM?

如何使用jQuery公開IFrame的DOM?

如何使用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節點,但它不會給你一個跨瀏覽器的方式從去documentwindow,所以你還是堅持了:

var iframe= $('#iframe_id')[0];var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;

這不是一個真正的大勝利。

(注意:使用jQuery進行跨框架腳本時要非常小心。每個框架需要自己的jQuery副本,一個框架副本的方法不一定適用于另一個框架的節點。跨框架腳本是一個充滿主題的主題陷阱。)


查看完整回答
反對 回復 2019-08-02
?
呼如林

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需要間隔塊。


查看完整回答
反對 回復 2019-08-02
?
繁華開滿天機

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}


查看完整回答
反對 回復 2019-08-02
  • 3 回答
  • 0 關注
  • 479 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號