Javascript 在Firefox 29扩展中禁用beforeunload对话

Javascript 在Firefox 29扩展中禁用beforeunload对话,javascript,firefox-addon,onbeforeunload,Javascript,Firefox Addon,Onbeforeunload,我正在尝试禁用Firefox扩展中的beforeUnload对话框,它一直工作到FF28,方法是将窗口包装到XPCNativeWrapper中,并使用addeventlistener重新定义window.onbeforeunload JavaScript示例: var win = new XPCNativeWrapper(window, "onbeforeunload", "event", "addEventListener()"); var beforeUnload = win.onbefor

我正在尝试禁用Firefox扩展中的beforeUnload对话框,它一直工作到FF28,方法是将窗口包装到XPCNativeWrapper中,并使用addeventlistener重新定义window.onbeforeunload

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);
当beforeUnload方法更改页面的位置时,这已在FF29中停止工作。在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.oldBeforeUnload的属性,然后覆盖onbeforeunload以禁用“卸载前”对话框


这应该适用于FF 3.6+

您是否正在尝试编辑加载项源代码?