2012-05-11 68 views
0

我試圖將HTML片段加載到下面新創建的iframe中。將HTML片段加載到動態創建的iframe中

<!DOCTYPE html> 
<html> 
<head><title>Test</title></head> 
<body> 
<script type="text/javascript"> 
    var iframeId = "frame" 
      + Math.floor((Math.random() + "") * 1000000000000).toString(); 

    document.write('<iframe height="300"' 
     + ' width="300"' 
     + ' frameborder="0"' 
     + ' scrolling="no"' 
     + ' id="' + iframeId + '"' 
     + ' name="' + iframeId + '"' 
     + ' allowtransparency="true"></iframe>'); 

    var iframe = document.getElementById(iframeId); 
    var iframeContent = '<!-- --\><script language=\"javascript\"\></script\>'; 
    iframe.contentWindow.document.open(); 

    iframe.contentWindow.document.write(
     '<!DOCTYPE html\><html\><head\><title\>Test</title\></head\><body\>' 
     + iframeContent 
     + '</body\></html\>'); 

    iframe.contentWindow.document.close(); 
</script> 
</body> 
</html> 

當我在瀏覽器中打開此文檔時,iframe未正確加載。有關可能會導致此問題的任何想法?

如果我設置iFrameContent爲

var iframeContent = '<!-- --\>'; 

var iframeContent = '<script language=\"javascript\"\></script\>'; 

的頁面似乎正常加載。

iframeContent基本上是第三方HTML代碼片段(使用freemarker js_string轉義),並可能包含HTML註釋。

+0

連接時不需要調用.toString()。 Javascript會自動執行。 – SomeKittens

回答

0

問題是,瀏覽器知道您的腳本部分完成的唯一方法是查找「」標記,並且您的腳本中間有一個正確的標記。它認爲這是你的JavaScript的結束,所以當然這是一個語法錯誤。它也可能會注意到「」標籤,並認爲你有嵌套的腳本。你可以嘗試這樣的:

var iframeContent = '<!-- --\><' + 
    'script language=\"javascript\"\></' + 'script\>'; 

然後看看是否有效。

更好的是使用類似document.createElement或jQuery庫來創建您的DOM元素。

0

看來,你的代碼在IE中工作,而不是在其他瀏覽器中。爲了得到它的工作,你需要以某種方式逃避標記開頭的註釋,例如:

var iframeContent = '<!\-- --\><script language=\"javascript\"\></script\>'; 

結束</script\> - 標籤是不是在這裏的一個問題,因爲它不是在代碼中的文字</script>