2016-09-25 2 views
0

データを表示するためにHTMLコードをiframeに挿入しようとしています。 Everythinkはうまく動作しますが、iFrameにJavaスクリプトを挿入したい場合、結果はありません。それはiframeは、任意のローカルJavaScriptを見ることができないようです。ここでローカルのjavasscriptをiframeに挿入します。

はコードです:

<html> 
    <head> 
     <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
     <script src="testJSON.js"></script> 
    </head> 
    <body> 
    <iframe id="frame"></iframe> 
    <p id="demo"></p> 
     <script src="names.js"></script> 
     <script type="text/javascript"> 
       $("#frame").attr(
      "src", "data:text/html;charset=utf-8," + 
      "<html><head>"+ 
      "<script src='jquery.min.js'><"+"/script>"+ 
      "<script src='testJSON.js'><"+"/script></head>"+ 
      "<body><p id='demo'></p>"+ 
      "<script src='name.js'><"+"/script>"+ 
      "<h1>Test</h1>"+ 
      "</body></html>" 
     ); 
     </script> 
</body> 
</html> 

testJSON.js:

var dane = '{ "names" : [' + 
'{ "firstName":"Ana" , "lastName":"Doe" },' + 
'{ "firstName":"Bill" , "lastName":"Smith" },' + 
'{ "firstName":"Dory" , "lastName":"Jones" } ]}'; 

names.js:

var nameID =function() { 
    return 2; 
}; 

obj = JSON.parse(dane); 
document.getElementById("demo").innerHTML = 
obj.names[nameID()].firstName + " " + obj.names[nameID()].lastName; 

誰もがこの問題の解決策を持っていますか?

はあなたに

+0

このページはローカルにホスト、またはサーバー、ローカルまたはWebサーバーであるされていますか? – Teemu

+0

補足として、IEをサポートする必要がない場合は、[srcdoc属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr -srcdoc) –

答えて

1

をありがとう、私はDataURIsは、セキュリティ上の理由から、外部スクリプトを含めることはできませんが、私はこれを確認し、重複SOポストを見つけることができないと仮定します。とにかく、HTMLとスクリプトをdocument.writeでフレームに書き込みます。 youreのは、IFRAMEがロードされる前に、そのため、デーンは未定義となり、JSONにアクセスしようとしている:それは

$("#frame")[0].document.contentDocument.write(
     "<html><head>"+ 
     "<script src='jquery.min.js'><\/script>"+ 
     "<script src='testJSON.js'><\/script></head>"+ 
     "<body><p id='demo'></p>"+ 
     "<script src='name.js'><\/script>"+ 
     "<h1>Test</h1>"+ 
     "</body></html>" 
    ); 
$("#frame")[0].contentDocument.close(); 

あなたは完全に

+0

多くのありがとう。私は$( "#frame")。attrを$( "#frame")[0] .contentDocument.writeに変更しました。 – doxy

0

がレースの問題を厥外部ファイルのURLを修飾する必要があるかもしれませんが動作します。リスナーまたはちょっとしたコールバックを使用します。

コールバック:

//in your page: 
function parse(json){ 
//do sth with json 
} 
//in the iframe: 
parse("{}"); 

リスナー:

document.getElementsByTagName("iframe")[0].onload=function(){ 
//you parsing js 
}; 
関連する問題