2015-06-15 71 views
0

我試圖將JavaScript文件添加到iframe的頭文件中,以便在加載時,iframe可以在執行「後臺任務」之前完成。目前iframe是空的,因爲沒有我希望它顯示的源。也就是說,所有的iframe都會執行我希望提供給它的腳本。從這裏將JS添加到空iframe

我已經試過建議:

  1. Can't append <script> element
  2. Insert a Script into a iFrame's Header, without clearing out the body of the iFrame
  3. Invoking JavaScript code in an iframe from the parent page
  4. Calling javascript function in iframe
  5. http://www.getallfix.com/2013/08/how-to-include-or-add-external-javascript-file-to-iframe-how-to-add-js-to-iframe/

然而,我無法得到一個簡單的「寫」到iframe的工作。 這裏是我一起工作的代碼:

demo.html

<html> 
<head> 
<script src="demo.js"></script> 

<script> 
addScript('demo.js'); 

function addScript(src){ 
// Find the iFrame 
var iframe = document.getElementById('test'); 
var val = '<scr' + 'ipt type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></scr' + 'ipt>'; 

var headID = iframe.getElementsByTagName("head")[0];   

var newScript = iframe.createElement('script'); 
newScript.type = 'text/javascript'; 
newScript.src = 'demo.js'; 
headID.appendChild(newScript); 

</script> 
</head> 
<body> 
    <div class="output"> 
     <iframe id="test"></iframe> 
    </div> 
</body> 
</html> 

demo.js

document.write("Hello, I'm a Demo."); 
+0

您對呼叫'addScript'後'iframe'已經被解析。 – Teemu

+0

@Teemu哪個'iframe'?實際的元素或變量? – user2958542

+0

在使用'getElementById'獲取對它的引用之前,元素必須存在。 – Teemu

回答

0

您應該使用iframe.contentWindow.document,而不是僅僅iframe一些您的通話。此外,demo.js位於外部頁面,不在iframe內,因此您需要提供絕對路徑(即http://www.example.com/demo.js),或者您需要設置腳本的內容。這爲我工作:

var iframe = document.getElementById('test'); 
var headID = iframe.contentWindow.document.getElementsByTagName("head")[0];   

var newScript = iframe.contentWindow.document.createElement('script'); 
newScript.innerHTML = 'document.write("Hello, I\'m a Demo")'; 
newScript.type = 'text/javascript'; 
headID.appendChild(newScript); 
+0

「Uncaught TypeError:無法讀取屬性'contentWindow'爲null」 – user2958542

+0

對不起,我只更改了下面的部分,所以我沒有想到在其上面包含iframe的聲明。我更新了回答 – mpallansch

+0

添加引用:http://www.w3schools.com/jsref/prop_frame_contentwindow.asp –

0

您可以直接添加的內容串

http://jsfiddle.net/0m5axpxx/

var iframe = document.createElement('iframe'); 
var html = '<body><scr'+ 'ipt>alert(1)</s' + 'cript>Content</body>'; 
iframe.src = 'data:text/html;charset=utf-8,' + encodeURI(html); 
document.body.appendChild(iframe);