복붙노트

[JQUERY] 어떻게 jQuery를 사용하여 IFrame을의 DOM을 노출?

JQUERY

어떻게 jQuery를 사용하여 IFrame을의 DOM을 노출?

해결법


  1. 1.당신이 window.frames 배열을 사용할 수있는 프레임 윈도우 객체를 얻으려면 :

    당신이 window.frames 배열을 사용할 수있는 프레임 윈도우 객체를 얻으려면 :

    var iframewindow= frames['iframe_name'];
    

    이것은 당신이 아이디 대신-또는 것과 같이 잘으로 이전 학교 이름 속성을 제공해야합니다. 당신은 페이지 당신이 할 수있는 숫자 인덱스를에 iframe을의 순서를 알고 또는 경우 :

    var iframewindow= frames[0];
    

    그것은 DOM에서 iframe 요소에서 iframe이 창을 얻기 위해 일반적으로 더 유연하지만, 이것은 IE에 대처하는 몇 가지 호환성 코드가 필요합니다 :

    var iframe= document.getElementById('iframe_id');
    var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;
    

    jQuery를 그 내용 () 문서의 노드를 잡기 위해 메소드를 정의하지만, 여전히 붙어있는, 그래서 그것은 당신에게 창에 문서에서 갈 수있는 크로스 브라우저 방법을 제공하지 않습니다

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

    이는 정말 큰 승리가 아닙니다.

    (참고 :.. 프레임 간 스크립팅을 위해 jQuery를 사용하여 매우 조심 각 프레임은 한 프레임의 사본에서 자신의 jQuery 사본 및 방법을 필요로 할 다른 크로스 프레임 스크립팅에서 노드에서 반드시 작업과 주제의 고민입니다 트랩.)


  2. 2.

    var iframe = $('iframe').contents(); // iframe.find('..') ...
    
    var parent = $(window.parent.document); // parent.find('..') ...
    

    부모와 iframe이 페이지가 동일한 도메인에있는 경우에만 적용됩니다.

    <iframe id="iframe1" src="iframe1.html"></iframe>
    <iframe id="iframe2" src="iframe2.html"></iframe>
    
    $(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 작업을 포함한 모든 주요 브라우저. 만 IE8 / 7 필요 간격 블록.


  3. 3.UPDATE @RoyiNamir의 코멘트 :

    UPDATE @RoyiNamir의 코멘트 :

    var frames = window.frames || window.document.frames;
    

    은 iframe에서 창.

    frames["myIframeId"].window
    

    은 iframe의 문서

    frames["myIframeId"].window.document
    

    은 iframe의 몸에

    frames["myIframeId"].window.document.body
    

    JQuery와있는 iframe 대응의 몸에

    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
    }
    
  4. from https://stackoverflow.com/questions/1654017/how-to-expose-iframes-dom-using-jquery by cc-by-sa and MIT license