4

我需要检查 iframe src 以了解父页面的更改。

$('myiframe').attr('src');

工作正常,但是当我从 iframe 中通过 javascript 更改 url 的哈希时

location.href += '#hash';

我可以看到它从 iframe 检查 location.href 发生了变化,但从父文档中,src 似乎没有改变。有什么帮助吗?

编辑

由于包含页面和 iframe 位于不同的域中,因此我必须使用 src 属性对其进行检查,并且无法访问 iframelocation.href属性。

4

4 回答 4

3

哈希参数不在属性 location.href 中,请尝试

location.hash = 'hash';
于 2012-12-17T14:59:19.700 回答
0

我怀疑你是否可以简单地从父 javascript 中做到这一点。因为那样我可以:

  1. 创建一个带有隐藏 iframe 的页面。(比如http://mysite.com/fake
  2. 在 iframe 中,在某个网站的登录过程中打开一些中间页面(类似于https://accounts.google.com/redirlogin
  3. 如果孩子的 cookie 存在并且没有足够的照顾,框架内的页面将重定向到实际网站,用户登录。
  4. 从父页面,我可以检查它所经过的所有中间 url,它们基本上可以包含一些会话 ID。

注意:我在 orkut 的日子里做过类似的事情,并且“中间登录页面”用于重定向到 orkut。这是为我想要实现的自动登录功能完成的。但是,我无法在父页面中获得任何信息。

笔记:

  1. 我可能完全错了,但我觉得从安全角度来看,这从纯父端代码是不可能的。孩子应该通知家长。
  2. 它可能确实适用于域内站点。
于 2012-12-17T15:14:15.850 回答
0

允许跨域框架设置但不能读取彼此的位置。(为什么?嗯,读取彼此的位置会违反相同的来源策略,可能会泄漏出现在 URL 中的敏感信息。我不完全确定为什么允许设置它们。历史上,站点使用导航父页面的能力到framebust,但这不再那么重要了。)

因此,如果您尝试使用散列片段进行跨域帧通信(并且由于某种原因不能使用 postMessage),那么这样做的方法是让内部框架更改其父位置的散列片段,使用window.top.location.href. 然后,父页面应该经常检查其哈希片段的更改。

是我找到的一个演示。

于 2012-12-17T15:16:45.960 回答
0

此片段适用于 youtube 剪辑、pdf 和 html 页面(除非框架被目标网站故意阻止)

该链接会将文档“htp://someurl”呈现为 div id="someID" 内的匿名 iframe

`<a href="htp://someurl" onclick="renderLink('someID');return false;" title="Click to view external document">view external document</a>`

`function renderLink() {`   
    `if (!e) var e = window.event;`
    `var pdfsrc = e.srcElement.getAttribute('href');`
    `var $pdfdiv = document.getElementById('someID');`
    `var $pdfTarget = $pdfdiv.getElementsByTagName("iframe")[0];`
    `$pdfTarget.src = pdfsrc;`
   `}` 
于 2015-01-05T15:21:03.060 回答