禁用Firefox 29扩展中的卸载前对话框



我试图禁用Firefox扩展中的beforeUnload对话框,该对话框一直工作到FF28,通过在XPCNativeWrapper中包装窗口并重新定义窗口。Onbeforeunload使用addeventlistener.

示例JavaScript:

var win = new XPCNativeWrapper(window, "onbeforeunload", "event", "addEventListener()");
var beforeUnload = win.onbeforeunload;
win.onbeforeunload = null;
var newBeforeUnload = function(e) {
    beforeUnload();
    //code to remove dialog
}
win.addEventListener('beforeunload', newBeforeUnload, false);

在FF29中,当beforeUnload方法改变页面的位置时,这已经停止工作了。在FF29我收到一个错误"访问'chrome://browser/content/page.html'从脚本拒绝"。

JS页面示例:

window.onbeforeunload = function() {
    parent.frame2.location="page.html";
};

所以,我能够使用以下命令解决我的问题:

windowToModify.location.replace("javascript:(" + function() {
    window.oldBeforeUnload = window.onbeforeunload;
    window.onbeforeunload = function(E) {
        window.oldBeforeUnload();
        var evt = e || window.event;
        if (evt && evt.returnValue) {
            delete evt['returnValue'];
        }
    };
    window.onunload = null;
} + ")()");

所以,javascript:(/*一些javascript作为字符串*/)是一个有效的位置,它将在窗口/框架的范围内运行。这个脚本设置了一个名为window的属性。然后重写onbeforeunload来禁用beforeunload对话框。

这应该在FF 3.6+

最新更新