我试图在Firefox扩展中禁用beforeUnload对话框,该扩展通过将窗口包装在XPCNativeWrapper中并使用addeventlistener重新定义window.onbeforeunload来解决直到FF28为止。
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+中有效
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句