【问题标题】:jQuery Frame Breaker by Array of Domains按域数组划分的 jQuery 帧中断器
【发布时间】:2015-11-03 15:51:14
【问题描述】:

使用 jQuery 和一个域数组,我想创建一个分帧器。我想评估顶部框架域,如果它是数组中的域之一,则将其中断。

var domains = ["zoot.li", "domain.com"];
if ( jQuery.inArray( top.location.host, domains ) > -1 ) {
    top.location.href = document.location.href ;
}

不过,它似乎不起作用。有什么想法吗?

【问题讨论】:

标签: javascript jquery frame


【解决方案1】:

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

我能想到的唯一方法是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2012-04-07
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多