爲什麼第二次嘗試將腳本加載到空的iframe時失敗?我瞭解第一個失敗,因爲我試圖加載頁面後加載腳本,但我會期望第二次和第三次嘗試工作。我認爲這可能是瀏覽器的安全限制,但通常情況下,您會在控制檯中看到一個錯誤,並用類似<script>alert(1);</script>
的東西代替腳本正常工作。爲什麼將base64內容加載到iframe src屬性有時會失敗
HTML
<iframe id="blah1">
</iframe>
<iframe id="blah2">
</iframe>
<iframe id="blah2-2">
</iframe>
<iframe id="blah3">
</iframe>
的JavaScript
(function(){
var content = '<html><head></head><body>' + '<' + 'scr' + 'ipt src="//content.jwplatform.com/players/81b03hN1-8gn7GBWz.js"><\/'+'scr' + 'ipt'+'>' + '</body></html>';
//attempt 1
var $body = $('body', $('#blah1').get(0).contentWindow.document);
$body.html(content);
//attempt 2
$('#blah2').attr('src', "data:text/html;charset=utf-8," + escape(content));
//simple alerts work
$('#blah2-2').attr('src', "data:text/html;charset=utf-8," + escape('<sc' + 'ript>alert(1);</scr' + 'ipt>'));
//attempt 3
var doc = $('#blah3').get(0).contentWindow.document;
doc.open();
doc.write(content);
doc.close();
})();
在Firefox中運行這個後,我看到一些SSL相關的錯誤,所以也許它不工作,因爲的base64 IFRAME作爲一個HTTP處理窗口,雖然你沒有在鉻控制檯中看到任何關於ssl錯誤,所以它可能是無關的。
也許不相關的你問,但你爲什麼這樣做:''+'<'+'scr'+'ipt'? – abimelex
@abimelex jsfiddle抱怨腳本內的腳本標記,我也發現一些瀏覽器不會允許你寫出腳本,無論是出於安全原因(雖然在這種情況下,我不能檢查,因爲js小提琴不會運行) – Snipzwolf