2017-07-06 13 views
0

なぜ、空のiframeにスクリプトを読み込む2回目の試行が失敗しますか?私はページがロードされた後にスクリプトを読み込もうとしているので最初の失敗を理解していますが、2回目と3回目の試みが期待されます。私はそれがブラウザのセキュリティ制限されている可能性があると思ったが、通常はコンソールにエラーが表示され、<script>alert(1);</script>のようなものでスクリプトを置き換えると正常に動作します。iframe src属性へのbase64コンテンツの読み込みが失敗することがある

jsfiddle link

HTML

<iframe id="blah1"> 
</iframe> 

<iframe id="blah2"> 
</iframe> 

<iframe id="blah2-2"> 
</iframe> 

<iframe id="blah3"> 
</iframe> 

Firefoxでこれを実行した後の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(); 
})(); 

私は、base64はiframeがHTTPとして扱われるので、それは働いていないので、多分いくつかのSSL関連のエラーを参照してくださいウィンドウが表示されますが、sslエラーについてはクロムコンソールには何も表示されないので、関連性がない可能性があります。

+0

をロードwindow.location.href.indexOf("https")やっているしかしとしてHTTPとHTTPSを切り替える扱うんあなたは質問しますが、なぜこれをしていますか? '+' <'+' scr '+' ipt'? – abimelex

+0

@abimelex jsfiddleは、スクリプト内にあるスクリプトタグについて不平を言っています。また、ブラウザによってはセキュリティ上の理由からスクリプトを書くことができないことがあります(この場合、jsがそれを実行します) – Snipzwolf

答えて

0

chromeのsslエラーは表示されませんが、base64データURIを使用する場合はプロトコル相対スクリプトURLを使用できないため、srcdocを使用してiframeコンテンツ(この例ではコメントアウトしています)を設定すると、プロトコル相対スクリプトのURLが機能します。私はこれを働かせた後、sslエラーがプレイヤーに負荷をかけないように十分な問題を引き起こすように見えます。

プレーヤーのスクリプトは、実際にチェックが、それは常にあなたがHTTPであると考え、間違ったスクリプトを多分に関係しない

(function(){ 
 
    var content = '<html><head></head><body>' + 
 
    '<' + 'scr' + 'ipt>' + ` 
 
    \t console.log(window.location.protocol, window.location.href, window.location.href.indexOf("https")); 
 
    ` + '<\/'+'scr' + 'ipt'+'>' + 
 
    '<' + 'scr' + 'ipt src="https://content.jwplatform.com/players/81b03hN1-8gn7GBWz.js"><\/'+'scr' + 'ipt'+'>' + '</body></html>'; 
 

 
    $('#blah1').attr('src', "data:text/html;charset=utf-8," + escape(content)); 
 
    //$('#blah1').attr('srcdoc', content); 
 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<iframe id="blah1"> 
 
</iframe>

関連する問題