我写了这段代码
function winUnload() {
alert("Unload Window");
MyMethod();
}
window.onunload = function() { winUnload(); }
Run Code Online (Sandbox Code Playgroud)
此代码在IE和Firefox中运行良好.但是此代码在Chrome中无效.双方的陈述alert("Unload Window");
和MyMethod();
不工作.
显然,window.onbeforeunload已经遇到了Chrome的问题,正如我从遇到的所有问题中看到的那样.最近的工作是什么?
我唯一接近工作的是这个:
window.onbeforeunload = function () { return "alert" };
Run Code Online (Sandbox Code Playgroud)
但是,如果我用"alert"("blah")之类的东西替换返回"alert",我从Chrome中得不到任何结果.
我在这个问题中看到谷歌有意阻止了这一点.对他们有好处......但如果有人关闭窗口我想要进行AJAX调用怎么办?在我的情况下,我想知道有人离开我的网站上的聊天室,由窗口关闭发出信号.
我想知道是否有办法
(a):修复window.onbeforeunload调用以便我可以将AJAX放在那里
或
(b):获取一些其他方法来确定Chrome窗口已关闭
是否有一种方法可以捕获window.onbeforeunload确认对话框的结果,如Stack Overflow中的下一个(当离开'Ask Question'页面而不发布问题时会发生这种情况)?
这就是它在Chrome中的显示方式,我相信它在其他浏览器中略有不同,但你总是有某种形式的是/否按钮.
据推测,如果事件被触发后他们仍然在违规页面上,他们选择留下来,你可以通过观察js序列来解决这个问题.但是我想知道如何确定他们是否点击了"离开此页面"?
我已经实现了如下:
// concept taken from SO implementation
function setConfirmUnload(showMessage, message) {
window.onbeforeunload = showMessage ? (message ? message : "this is a default message") : null;
}
// pseudo code
listen to changes on inputs
if any inputs fire a change event
call setConfirmUnload(true, 'My warning message')
Run Code Online (Sandbox Code Playgroud)
请注意我在我的网站中使用jQuery.
我本质上是在尝试实现像绘图实现一样的Gmail,其中如果用户离开带有表单的页面,他们已经进行了更改而没有保存,他们会使用类似的对话框加热.如果他们选择丢弃他们的更改并离开页面,我需要清理数据库中的一些临时记录(我正在考虑一个AJAX调用,或者只是提交带有delete
标志的表单)然后在他们的路上发送它们.
我的问题还涉及:
在手动刷新后获取页面后,onunload处理程序中的jQuery AJAX调用触发.我如何保证首先发生onunload?
javascript jquery javascript-events onunload window.onunload
我希望能够告诉我打开的窗口何时被用户关闭.这是我试图监控这个的代码:
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
window.document.onready = function () {
document.getElementById('openWindow').onclick = function () {
var windowref = window.open('tests2.html');
windowref.onunload = function () {
window.alert('hola!');
};
};
};
</script>
</head>
<body>
<button id='openWindow'>Open Window</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我希望这会提醒"hola!" 在打开的窗口window.open
关闭后的原始窗口中.相反,它警告"hola!" 在打开新窗口后立即在原始窗口中window.open
.它为什么这样工作?有办法做我想做的事吗?
有没有办法在离开JSF页面时调用方法?
<html>
<body>
<button type="button" onclick="clickme()">Click Me</button>
<script>
var test = 0;
function clickme() {
test = 1;
console.log(test);
}
window.onunload = function() {
alert("test");
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我正在使用这个简单的代码来测试onunload和onbeforeunload的一些东西.出于某种原因,每当我刷新/离开页面并导致onunload事件时,我都不会在Firebug控制台中收到警报和错误.如果我使用onbeforeunload这工作,我没有错误,但我听说onbeforeunload不是很好的跨浏览器.
NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111
(NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert]
alert("test");
Run Code Online (Sandbox Code Playgroud)
我没有试图提醒测试变量,只是文本"测试"之前任何人都试图指出这一点.
当用户未按"保存"并且Chrome扩展程序弹出窗口关闭或导航到其他选项卡时,我正在尝试防止信息丢失.我从弹出窗口保存文本,并在弹出窗口再次打开后将其放回原处.
所以,我有这个代码来检测background.js中的关闭弹出窗口:
var backgroundPage = chrome.extension.getBackgroundPage();
window.addEventListener("unload", function() {
if(saved === false) {
var savedText = document.getElementById('textbox').value;
localStorage.setItem('text', savedText);
backgroundPage.console.log(localStorage.getItem('text'));
}
}, true);
Run Code Online (Sandbox Code Playgroud)
在另一个函数中,一旦再次加载弹出窗口,我将数据设置为
if(localStorage.getItem('text') !== "") {
document.getElementById('text').value = localStorage.getItem('title');
}
Run Code Online (Sandbox Code Playgroud)
但是,这有时只能起作用.我看过其他帖子,铬有一个bug:检测卸载事件.但是,我看到的问题很奇怪.当我没有我的后台页面检查视图打开时,导航离开并重新打开后,数据不会显示在弹出窗口的文本框中.但是,如果我的背景页面检查视图打开,数据显示在文本框中...我是Chrome扩展开发的新手,有人可以帮我解决这个问题吗?
我还尝试了为消息传递设置端口的其他建议,但不确定如何正确执行此操作.在background.js中:
port.onDisconnect.addListener(function() {
backgroundPage.console.log("Disconnected");
})
Run Code Online (Sandbox Code Playgroud)
我需要什么吗?我在哪里设置端口和chrome.runtime.onConnect?这是什么代码?
javascript jquery popup google-chrome-extension window.onunload
javascript ×6
onunload ×3
jquery ×2
alert ×1
browser ×1
jsf ×1
managed-bean ×1
popup ×1
primefaces ×1
window.open ×1