【发布时间】:2016-01-08 16:58:20
【问题描述】:
我查看了所有其他 Javascript 的“onunload”问题,我想我已经理解了它们,但我似乎仍然无法让这个功能发挥作用。
具体来说,我正在开发一个在 Apple 的 Safari 浏览器下运行的应用程序,并且我试图捕捉通过单击 Safari 浏览器窗口最左上角的红色 Window Close gumdrop 触发的窗口关闭事件。
如果我点击红色的关闭窗口软糖,窗口会关闭,但不会访问和执行“onunload”功能。
但是……如果我重新加载页面,“onunload”函数就会被访问并执行。
这很好,但我真正想做的是在点击红色窗口关闭软糖后执行一些代码。
我的代码根本不起作用。
我要么误解了某些东西,要么遗漏了一些东西。
有没有人知道我错过了什么或做错了什么?
这是我写的测试源代码,看看我是否可以让 Javascript 的“onunload”函数工作:
<!DOCTYPE html>
<html>
<head>
<title>Window - 'onunload' Javascript function Test</title>
<script>
function WindowOnUnLoadTest ()
{ alert ("Entering … 'WindowOnUnLoadTest' …");}
window.onunload=WindowOnUnLoadTest;
</script>
</head>
<body onunload="WindowOnUnLoadTest()">
</body>
</html>
20151024 这是编辑后的代码:
<!DOCTYPE html>
<html>
<head>
<title>Window Open Test 3</title>
<style>
#Image_01_Closed
{
position : absolute;
left : 16px;
top : 16px;
}
</style>
<script>
var URL_Set_Prefix = "file:///Users/simonwhelan/Desktop/WindowOpenTest3/";
var File_PathName = "";
var Window_01A_Closed_File_PathName = URL_Set_Prefix + "Window-01A-Closed";
var Window_01A_Open_File_PathName = URL_Set_Prefix + "Window-01A-Open" ;
var Window_01B_File_PathName = URL_Set_Prefix + "Window-01B-Open" ;
var Window_01B_HTML_File_PathName = URL_Set_Prefix + "Window-01B.html" ;
var Window_Open = false;
var Window_01B = null;
function turnAnImageOnOrOff (imageArrayIndexNbr,
id,
src)
{
if (Window_Open === true)
{ File_PathName = Window_01A_Closed_File_PathName; }
else { File_PathName = Window_01A_Open_File_PathName ; }
document.getElementById(id).src = File_PathName;
open_Or_Close_A_Window (imageArrayIndexNbr);
Window_Open = !Window_Open;
}
var current_Window_B_X_Position_Value = 8;
var current_Window_B_Y_Position_Value = 8;
function open_Or_Close_A_Window (imageArrayIndexNbr)
{
if (Window_Open === false)
{
Window_01B = window.open (Window_01B_HTML_File_PathName,
"_blank",
"top = " + current_Window_B_X_Position_Value + ", "
+ "left = " + current_Window_B_Y_Position_Value);
}
else { Window_01B.close(); };
File_PathName = URL_Set_Prefix
+ Window_01B_HTML_File_PathName;
}
</script>
</head>
<body>
<img
id = "Image_01_Closed"
src = "Window-01A-Closed"
alt = "Window A-01 - Closed"
onclick = "turnAnImageOnOrOff (0, id, src)"
width = "80"
height = "80"
>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Window B-01 Open</title>
<style>
#Page_Background
{
position : absolute;
left : 8px;
top : 8px;
}
</style>
<script>
function WindowOnUnLoadTest ()
{
console.log("Entered WindowOnUnLoadTest");
return "Done with WindowOnUnLoadTest";
}
window.onbeforeunload=WindowOnUnLoadTest;
// window.onunload=WindowOnUnLoadTest;
</script>
</head>
<body>
<img
id = "Page_Background"
src = "Window-01B-Open"
alt = "Window B-01 Open : Page Background"
width = "80"
height = "80"
>
</body>
</html>
【问题讨论】:
-
由于某种原因 StackOverflow 剪掉了源代码的第 1 3 行和最后一行。
-
您需要在每行代码前加上四个空格,或者选择代码并单击
{}按钮 - 已为您修复 -
Javascript 函数
onunload()和onbeforeunload()有很多限制。访问者不喜欢网站滥用这些功能来阻止访问者通过提醒东西、弹出一些东西等来阻止访问者离开。所以大多数浏览器都阻止使用这些功能来阻止用户在他们想要关闭网站时阻止他们:) -
因此,不要发出警报,而是尝试打开浏览器控制台(分离它,否则关闭时会丢失控制台)并通过删除警报并添加
console.log ( 'unload triggered' );来编辑代码现在控制台应该显示它是否工作与否。 -
附带说明:请记住
onunload()和onbeforeunload()不是可靠的函数!如果浏览器意外关闭(崩溃、网络中断、进程终止),这些函数将永远不会触发。
标签: javascript