2014-09-26 845 views
5

我使用iframe将faroo.com作为默认src加载到框架中,当我搜索并使用faroo移动到其他网页时,但仍然在iframe src中显示faroo.com我想捕捉在iframe中加载页面的URL如何从iframe获取当前页面加载的url

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script> 
    <script type="text/javascript"> 
    $(function(){ 
     $('#frameid').load(function(){ 
      var z=$('#frameid').attr('src'); 
      console.log('hi '+z); 
     }); 

     $('#clicked').on('click', function(){ 
      $('#frameid').attr('src', 'http://www.faroo.com/');  
     }); 
    }); 

</script> 

</head> 
<body> 

<iframe width="100%" height="500px" id="frameid" src="" name="iframe_a" ></iframe> 

<p><input type="button" value="click me!" id="clicked"></p> 

</body> 
</html> 

在执行console.log的O/p总是faroo.com不是当前网站已加载

+0

如果你正在寻找的“父母”页面的iframe的网址,看到http://stackoverflow.com/q/3420004/32453 – rogerdpack 2016-11-08 20:48:45

回答

13

出于安全性的问题,你是只要iframe的内容和引用javascript位于同一个域中,就允许检索URL。

它应该是这样,你可以这样做:

document.getElementById("frameid").contentWindow.location.href 

如果这两个域是不同的,那么你就拥有所有适用于cross-site reference scripting域的限制。例如:

document.getElementById("frameid").src = 'http://www.google.com/'; 
alert(document.getElementById("frameid").documentWindow.location.href); 

Error: Permission denied to get property Location.href 

可以肯定的(除非你发现在你的浏览器中一些巨大的安全漏洞),你根本无法实现您需要的父文档中使用javascript什么。我们来看一个简单的例子为什么。如果浏览器允许你需要什么,你可以很容易:

  1. 创建一个页面,用隐藏的iframe(如http://malicous.com/dont-trust
  2. 在该iframe,打开一个子页面与一些网站的登录过程(如http://insecure-web-site.com/redirectlogin
  3. 如果孩子的cookies存在,并且在某些情况下,框架内的页面将重定向到真实网站,继续用户登录。
  4. 现在,您可以从父页面读取URL中包含的所有登录过程中的敏感信息,例如,访问令牌,会话ID,...
  5. 此时受害人网站及其用户是在很宽的一套新的可能的安全威胁面前...
+0

以及可能的document.getElementById(“myframe”) .contentWindow.document.location.href可以工作 – Teo 2014-09-26 08:28:46

+0

是否还有其他方法可以这样做。我试图创建一个虚拟浏览器,它可以记录它作为历史访问的网页的URL。 – user4082518 2014-09-26 09:19:22

+0

我不认为你可以用JS做到这一点。查看更新的答案。 – 2014-09-26 13:35:26

1

似乎喜欢有一个黑客,使这项工作,我实际上不能相信它甚至是被允许的。这是怎么回事似乎工作:

1)更改域匹配的iframe:

document.domain = <iframe_domain> 

2)获取URL像这样:

console.log($('iframe')[0].contentWindow.location.href) 

在我看来,这不应该已经工作,但它确实。

主:我在Safari,Chrome和Firefox的所有最新版本以下为2017年2月1日测试http://subdomain.website.com 的iframe:http://www.website.com

你觉得呢?这是永久性允许的还是它将会很快被修补的疏忽?

更新

我开始在这里讨论浏览器安全性的另一个线程。

Isn't This A Serious Browser Security Issue? RE: Cross-Domain iframe Hack

更新2

看起来这将永远是具体的案例来支持。

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy