【问题标题】:How can I detect if an iFrame gets redirected to another url?如何检测 iFrame 是否被重定向到另一个 url?
【发布时间】:2012-12-05 03:51:00
【问题描述】:

我想列出一个包含分类广告的 iframe。有时,当商品不再可用时,供应商会将页面重定向到他们的主页。我希望能够识别这一点,这样我就可以在假设它已售出的情况下取消索引该项目。实现这一目标的最佳方法是什么?

【问题讨论】:

  • 据我所知,这是不可能的。只有当 iframe 引用托管在您的域上的内容时,您才能执行此操作。

标签: javascript redirect iframe


【解决方案1】:

当 iframe 位于不同的域中时,您无法检测到它的位置,除非它们为 CORS 设置了正确的标头。

不担心其他域的唯一方法是让您的服务器端代码在页面上运行检查并查看它是否重定向。

【讨论】:

    【解决方案2】:

    您可以使用触发 onload 或 reload 的 jQuery 加载函数。

    http://api.jquery.com/load/

    您需要存储 iframe 重新加载的次数。

    类似的,

    var reloaded = 0;
    $("#iframe_id").load(function(){
        reloaded++;
    });
    

    【讨论】:

    • 真的吗?这只是一个内容加载事件,与来源无关。
    • 似乎重定向响应没有触发加载事件,只触发了最终响应。
    【解决方案3】:

    在框架加载时,检测 URL 是什么:

    var frameLoadCount = 0;
    var firstURL;
    
    $('iframe').load(function() {
        if (frameLoadCount === 0) {
            firstURL = $(this).attr('src');
        } else {
            if (firstURL !== $(this).attr('src')) {
                // The iframe has been redirected.
            }
        } 
    });
    

    基本上,每次 iframe 加载时,上面的代码都会运行,检查是否是第一次,如果是,则将 URL 分配给变量。如果已经加载了不止一次,请检查原始 url 是否与当前 url 匹配。

    这得益于仅检查它是否加载了多次,因为您可以定位特定来源等。

    【讨论】:

    • 除非他们允许跨域调用。简单地说“不在另一个域上工作”是没有用的,因为它是不正确的。如果允许,它可以在另一个域上工作。
    • 我敢打赌,大多数网站默认不启用 CORS。
    • 是的,确实很难找到能够让您跨域引用的网站。但它确实存在,只是说它不存在会让开始学习 iframe 工作原理的人感到困惑。
    • 感谢您的意见我认为跨域问题可能会阻塞它只是不知道是否有解决方法。
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多