2011-02-07 36 views
0

iframeからjsonを取得するにはどうすればいいですか?ここにjsonpはありません。 (JavaScriptのみを使用してください)iframeからjsonを取得しています - jsonpでない

<script type="text/javascript"> 
var theFrame = document.getElementById('iframe'); 
      var theWin = theFrame.contentWindow; 
      var theDoc = theFrame.contentDocument || theFrame.contentWindow.document; 
var json = theDoc; 
var msgs = JSON.parse(theDoc); 

for (var i = 0, l = msgs.length; i < l; i++) { 
    var msg = msgs[i]; 
    var div = document.createElement('div'); 
    div.innerHTML = 'Hello ' + msg.user + ' your Id is: ' + msg.ID + 'and your message is: ' + msg.message + ' it has ' + msg.replies + ' replies'; 
    document.body.appendChild(div); 

</script> 

<iframe id="iframe" name="iframe" src="http://jsonsource.com/not/jsonp/" width="100" height="100"> 
    <p>Your browser does not support iframes.</p> 
</iframe> 

答えて

2

iframeにはXHRと同じ発信元ポリシーが適用されます。あなたの目標がそれを回避することであるなら、それを忘れてください。あなたの目標がそれを回避することではない場合は、XHRの代わりにiframeを使用する理由(これははるかに良いAPIを持っています)?

つまり、明らかにコードが間違っているのは、iframeが存在する前にiframeにアクセスしようとすることだけです。スクリプトをその後ろに移動します。

+0

はい、私の目標の一種ですが、iframeのドキュメントテキストをいくつか取得して、それを私のjsonとして解析することはできませんか? – Dakota

+2

銀行のウェブサイトをiframeに読み込んで、ブラウザでパスワードを入力してから、JavaScriptで読むことができます - **いいえ! *同じ原点を回避したい場合、それを提供するサーバーは、実行可能なJavaScript(JSON-P)としてデータを提供する必要があります。または、要求を行ったページと同じ起点を介してプロキシする必要があります。 – Quentin

+0

@Dakotaリクエストしたページと同じドメインに存在するiframeのコンテンツしか取得できないと考えています – Adrian

0

iframeのcontentDocument.documentElement.textContentプロパティにアクセスして、必要なものを取得できます。 (IEでは、textContentの代わりにinnerTextです。)

+0

iframeが要求元のページと同じドメインにある場合にのみ動作します。これは、ダコタがやりたいことについては機能しません – Adrian

関連する問題