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

Mem*_*r-X 2 html javascript iframe jquery 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>
Run Code Online (Sandbox Code Playgroud)

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

我想知道我做错了什么

sac*_*024 5

由于同源策略限制,如果从另一个域运行页面,则无法访问iframe的内容.有相同的域策略的解决方案,如

  • 通过代理打开页面

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

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

请注意,这不是一项微不足道的任务,您可能需要在代理处理很多案例,例如处理相对URL,通过iframe_url读取cookie等等.所以只有在你急需它时才去做.

另一种解决方案可能是:

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

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

PS:只是为了获得一些好的信息,请阅读绕过同一原产地政策的方法