域阵列的jQuery Frame Breaker

时间:2015-11-03 15:51:14

标签: javascript jquery frame

使用jQuery和一组域,我想创建一个帧断路器。我想评估顶部框架域,如果它是阵列中的一个域,那么就打破它。

var domains = ["zoot.li", "domain.com"];
if ( jQuery.inArray( top.location.host, domains ) > -1 ) {
    top.location.href = document.location.href ;
}
但是,它似乎没有起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

跨域安全性不允许您读取不同来源的帧(包括父帧)的URL。

我能想到的唯一方法是:

  1. 等待加载帧内容
  2. 通过在 x 秒后设置setTimeout来启动top.location该帧突发
  3. 随机生成一个大数字作为安全码
  4. 在邮件中使用该号码向top发送postMessage。按顺序执行 依次为您允许的每个域设置targetOrigin
  5. top域中,有一个事件监听器等待邮件,其中的安全代码通过立即使用postMessage 将其发回来响应它。 (注意:由于targetOrigin,只有可接受的域才能看到代码。
  6. 在框架页面中有一个等待代码返回的事件监听器。检查它是否与步骤3中生成的匹配,然后在函数执行帧突发之前clearTimeout