2011-02-07 33 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有相同的起源策略。所以,如果你的目标是要解决这个问题,那就把它忘掉吧。如果你的目标不是解决这个问题,为什么你会使用iframe而不是XHR(它有更好的API)?

也就是说,代码中唯一明显错误的是,您尝试在iframe存在之前访问iframe。将脚本移到它之后。

+0

是的,这是我的目标,但我不能获得iframe的文档文本一些如何和使用,作为我的JSON解析? – Dakota 2011-02-07 22:30:37

+2

我只会将您的银行网站加载到iframe中,让您的浏览器为您填写密码,然后使用JavaScript阅读它 - **否!您不能!** - 如果您想绕过Same Origin,那么提供它的服务器必须将数据提供为可执行的JavaScript(JSON-P),或者您需要通过与提出请求的页面相同的来源代理它。 – Quentin 2011-02-07 22:32:06

0

您可以通过访问iframe的contentDocument.documentElement.textContent属性来获取所需内容。 (在IE中,它是innerText而不是textContent。)