【问题标题】:global interceptor for third party scripts who redirect重定向的第三方脚本的全局拦截器
【发布时间】:2012-01-27 22:28:23
【问题描述】:

一个非现场第三方小部件的脚本在执行期间中断,并将我主页上的所有流量重定向到他们的。

由于我无法杀死它们,我要么不得不杀死脚本,要么想办法阻止第三方 JavaScript 可能会重定向浏览器的任何尝试。我发现的最有希望的事件是.unload()window.onbeforeunload,我的想法是希望检查 GET 请求,然后验证 URL 是否与我页面上的任何有效链接不匹配,这没问题,除了我不知道如何获取事件的 GET 值,因为它不受页面上的任何点击或操作的约束,而是第三方 .js 中的虚假内容或其他内容?

任何人都幸运地找到了解决此类问题的方法吗?

【问题讨论】:

  • 为什么不直接修补第三方小部件,使其不会重定向?我认为没有任何方法可以“验证”其他一些 javascript 可能设置 window.location 的所有位置。
  • 因为它是用于企业级应用程序的第三方专有 Web 服务接口——它实际上不应该重定向,而且他们的事件报告有点像这样:“我们不知道发生了什么或为什么数以百万计的用户在下午被重定向到我们的主页”,以防止将来再次发生任何第三方服务。

标签: jquery redirect intercept


【解决方案1】:

据我所知,无法拦截所有可能的位置,第 3 方 javascript 可能会设置 window.location 导致重定向并预检它。它不是一种方法,它只是一个设置为没有方法可以替换/覆盖的属性。

页面卸载事件只是让您有机会询问用户是否真的想离开此页面,但它无法访问新页面的目的地。

我唯一能想到的就是保留一个全局变量,其中包含一个默认为 false 的布尔值。在您可能更改自己代码中的页面的所有可能的地方,您将该布尔值设置为 true。在 onbeforeunload 处理程序中,您检查该全局变量以查看它是否是您的代码所做的事情。如果这不是您的代码所做的事情,您会从 onbeforeunload 返回一条消息,因此将提示用户他们是否真的想离开。但是,您无法阻止它(这是故意的浏览器设计)。如果他们对提示说“是”,他们会将页面离开到新的目的地。

如果您或其他人实际上可以弄清楚为什么第 3 方故意导致重定向,那么也许您可以专注于确保这种情况不会再次发生,但您没有向我们提供任何信息,所以我们真的帮不上忙。

【讨论】:

  • 故意不讨论他们的脚本的任何解决方案,要求提供减轻第三方混乱的想法,这些问题可能会在执行期间导致重定向。抱歉,如果不清楚。感谢您的回复!我希望我可以在前端设置一个通用的出口防护装置,这将是非常棒的,但目前实施这样的解决方案的实用性对我来说是不可行的。
猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 2019-02-24
  • 2015-08-22
  • 1970-01-01
  • 2020-01-25
  • 2020-12-16
  • 2014-01-31
  • 2017-11-28
相关资源
最近更新 更多