【问题标题】:fetching json from iframe -- not jsonp从 iframe 获取 json -- 不是 jsonp
【发布时间】:2011-02-07 22:23:58
【问题描述】:

我如何从 iframe 中获取 json,它不是 jsonp,这是我所拥有的。 (当然只使用 javascript)

<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>

【问题讨论】:

    标签: javascript html json iframe


    【解决方案1】:

    iframe 受制于与 XHR 相同的源策略。因此,如果您的目标是解决这个问题,请忘记它。如果您的目标不是解决这个问题,为什么要使用 iframe 而不是 XHR(它有更好的 API)?

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

    【讨论】:

    • 是的,这是我的目标,但我不能以某种方式获取 iframe 的文档文本并将其用作我的 json 进行解析吗?
    • 我只需将您银行的网站加载到 iframe 中,让您的浏览器为您填写密码,然后使用 JavaScript 读取密码 — 不!你不能!——如果你想绕过同源,那么提供它的服务器必须以可执行 JavaScript (JSON-P) 的形式提供数据,或者你需要通过与页面制作相同的源来代理它请求。
    • @Dakota 我相信如果 iframe 与请求页面存在于同一域中,您只能获取 iframe 的内容
    • JSON 存储为纯文本
    • @Dakota — 那又怎样?我的停车位目前正在储存“一些空气”。如果我想开车去某个地方,我必须租、买或借一辆车。我不能驾驶“空中”。没有 JavaScript 可以访问的表单+位置中的数据不会改变浏览器的安全策略,以便它可以访问它。
    【解决方案2】:

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

    【讨论】:

    • 仅当 iframe 与请求页面位于同一域中时才有效。所以这对达科他州想要做的事情不起作用
    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多