2012-05-15 2 views
0

iframe에서 일부 작업을 수행해야하는 스크립트를 작성하고 있습니다. 내가 소유하지 않은 사이트의 사용자 스크립트입니다. 따라서 도메인 간 문제로 인해 iframesrc을 내 코드가있는 페이지로 설정할 수는 없습니다. 대신 동적으로 iframe을 작성합니다. iFrame에서 jQuery를로드하십시오.

내가

function childScripts(){ 
    //Stuff that must be injected into the iframe. 
    //Needs jQuery 
} 


//because I'm lazy: 
var iframeWin=$('#my-iframe')[0].contentWindow; 

//Load jQuery: 
var script = iframeWin.document.createElement("script"); 
script.type = "text/javascript"; 
script.src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" 
iframeWin.document.head.appendChild(script); 

//Inject script 
var script = iframeWin.document.createElement("script"); 
script.type = "text/javascript"; 
script.textContent="("+childScripts.toString()+")()"; 
iframeWin.document.body.appendChild(script); 

지금, 주입 된 스크립트가 jQuery를 필요가 이렇게하려면,하지만 어떤 이유로, jQuery를이 주입 된 스크립트가 실행될 때로드되지 않습니다 - jQuery를이 <head>과의 경우에도 주사 된 스크립트는 <body>입니다.

다른 해결 방법을 시도했습니다. 삽입 된 스크립트를 onload으로 실행했습니다. 타임 아웃을 설정하고 jQuery의 존재 여부를 확인하는 아이디어가 마음에 들지 않아보다 세련된 솔루션을 선호합니다.

$ 개체를 iframeWin.$으로 복사 해 보았습니다. 물론 부모 개체로 역 참조하고 부모 문서를 조작하기 때문에 작동하지 않습니다.

답변

2

jQuery를 사용하여 iframe을 조작하는 것이 더 쉽습니다. 시도하십시오 :

$('<iframe id="my-iframe"/>').load(function(){ 
    $('#my-iframe').contents().find('body').append('asd').end() 
          .find('body').append('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"><\/script>').end() 
          .find('body').append('<script>$(function() {alert("hello from jquery");console.log("hello from jquery"); })<\/script>');        

}).appendTo("body"); 

배치 :

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script> 
     $('<iframe id="my-iframe"/>').load(function(){..... 
    </script> 
</body> 
</html> 
+0

은'asd'가 무엇을? – Manishearth

+0

''asd ''를 무시하고 그것을 잊어 버릴 수 있습니다. 스크립트 태그를 삽입하기 전에 iframe을 테스트하는 데 사용했습니다. –

+0

어떤 이유로 스크립트가 _all_에 추가되지 않습니다. 'load'를 제거하면 물건이 추가되지만 스크립트는 여전히 제거됩니다. O_0 – Manishearth