在一个页面上阻止“document.location”Javascript重定向

在一个页面上阻止“document.location”Javascript重定向

我有一个网站,我想使用脚本标记中的 document.location 来阻止页面重新加载。如何在 Firefox 中做到这一点?

答案1

实际上,如果 HTML 代码包含带有重定向的内联 javascript 块,则 Greasemonkey 将不会阻塞,如下所示:

<script type="text/javascript">
var url = "http://google.com";
document.location.replace(url);
</script>

但是,Greasemonkey 可用于阻止对特定函数的调用 - 只需覆盖它们即可:)。如果将上述内容包装成函数调用,如下所示:

<script type="text/javascript">
function redirect_to(url)
{
  document.location.replace(url);
}
</script>

然后您可以在 Greasemonkey 中重新定义该函数:

function redirect_to(url){ return true }

通过 Firefox 阻止内联重定向

本质上,Firefox 可以location.href.replace通过所谓的以下方式阻止任何来自特定站点的 DOM 操作:可配置安全策略 (CAPS)

警告:请注意,您的安全设置将阻止来自该域的所有调用location.href.replace。如果任何应用程序使用该调用,则无法允许某些调用并阻止其他调用。

设置 CAPS 来阻止 location.href.replace

您不需要 Greasemonkey 来完成此任务。Firefox 具有内置功能,可以根据每个站点允许/禁止访问 DOM 对象的属性/方法。它称为可配置安全策略 (CAPS),其描述如下1

假设最简单的情况的简短指南:

  1. 关闭 Firefox
  2. 找到您的配置文件文件夹
  3. 在此文件夹中找到文件 user.js。如果不存在,请使用文本编辑器(记事本、vim 等)
  4. 将以下行添加到 user.js:

    用户首选项(“capability.policy.policynames”,“noframebuster”);用户首选项(“capability.policy.noframebuster.sites”,“http://www.annoying-site.com"); user_pref("capability.policy.noframebuster.Location.replace", "noAccess");

当然,您必须将这个域名替换为您想要阻止重定向框架的域名。

从我的博客(justaddwater.dk)中找到更详尽的解释:Firefox 中有关 Framebuster JavaScript 的提示

答案2

如果你习惯使用调试Firefox 中的功能手表方法对我有用:

document.watch('location', function() {
    return '#';
});

我不确定关于性能等方面的警告是否适用分子动力学,也许有人在这种情况下对这些有一些见解。

答案3

GreaseMonkeyFirefox 的附加组件正是为实现这一目的而设计的。

答案4

尝试YesScript 扩展

YesScript 可让您创建不允许运行 JavaScript 的网站黑名单。

相关内容