无法访问iframe内容(同源政策)

时间:2014-01-06 05:38:57

标签: javascript jquery html iframe same-origin-policy

我有以下页面

<!DOCTYPE html> 
<html>
<script type="text/javascript">
    function loopLink(i) 
    {
        window.open($('#iframe_a').contents().find('.image-navigator-mid a').attr('href'),'iframe_a');
        setTimeout(function()
        {
            if (i < 3) loopLink(i+1);
        }, 5000);
    }
    // Wait for the page to load first
    window.onload = function() {

      var a = document.getElementById("mylink");

      a.onclick = function() {
        loopLink(0);
        return false;
      }
    }
</script>
<iframe src="http://nanofate.us/content/fate-new-hair-style#node-inner" width="500" height="500" name="iframe_a" id="iframe_a"></iframe>
<br />
<a id="mylink" href="">Execute</a>

这个想法是,在它的当前形式中,当你单击Execute时,javascript将导致iframe使用“previous”链接4次,每次等待5秒,但是当我点击链接时它只是重新加载页面甚至等了10秒之后,iframe什么都不做

我想知道我做错了什么

2 个答案:

答案 0 :(得分:5)

由于Same Origin Policy限制,如果iframe运行来自其他域的网页,则无法访问iframe的内容。有相同域策略的解决方案,如

  • 通过代理打开页面

结帐Tomodo。它只是给你一个暗示他们如何使用代理绕过相同的源策略约束和访问iframe内容。所以实现的想法就像这样

  • 创建代理并在a.com/proxy
  • 托管代理
  • a.com/index.html
  • 主持您的主页
  • 现在,请求您的代理为您提供iframe_url的内容,例如a.com/proxy?url=iframe_url.com

请注意,这不是一项微不足道的任务,您可能需要在代理处理大量案件,例如处理相对网址通过iframe_url读取Cookie 等等 所以,只有在你迫切需要的时候才去做。

另一个解决方案可能是:

如果您要为特定域下载某些图像,请向您询问服务器端代码。您的后端代码将获取页面的html并使用一些HTML解析器,如

解析img标签并提取源并获取图像并下载它们。

PS :仅提供一些有用的信息,请阅读Ways to circumvent same origin policy

答案 1 :(得分:0)

我认为你所做的事情遵循相同的原产地政策。这应该是您获得权限被拒绝类型错误的原因。