基本上,我想让Firefox服从“当网站尝试重定向或重新加载页面时警告我”用户偏好。目前,对于任何类型的门口作家来说,这都是非常开放的芝麻等。
请在related superuser post中找到有关此不当行为的详细说明。
答案 0 :(得分:3)
您可以使用Object.watch()
拦截某些属性的更改,例如window.location
:
function onLocationChange(id, oldval, newval)
{
if (confirm("Do you want to navigate to " + newval + "?"))
return newval;
else
return oldval;
}
wnd.watch("location", onLocationChange);
wnd.document.watch("location", onLocationChange);
wnd.location.watch("href", onLocationChange);
您必须同样拦截对host
或pathname
等其他window.location
properties的分配。这种方法的最大缺点是:只能有一个观察者。如果页面安装了自己的观察程序或只是调用wnd.unwatch("location")
,则所有检测都将消失。
如何在JavaScript有机会运行的任何页面之前进入窗口取决于您是使用附加SDK还是使用经典附加组件。如果您使用的是附加SDK,则使用page-mod
module并将contentScriptWhen
参数设置为start
。在上面的代码示例中,您将wnd
替换为unsafeWindow
(必须直接访问该窗口,否则它将无效)。
在经典插件中,您注册了content-document-global-created
notification的观察者。在这里,您还必须直接访问该窗口:
var wnd = XPCNativeWrapper.unwrap(subject);
答案 1 :(得分:1)
使用window.location
属性可以完成“JavaScript驱动的重定向”。您需要做的就是在页面加载后立即替换该属性的setter
函数。
这是关于定义属性的setter和getter的John Resig博客文章。 http://ejohn.org/blog/javascript-getters-and-setters/
我无法使用客户端js覆盖默认的window.location
setter,但是可以使用更具特权的扩展环境。