问题

当焦点在 Unity WebPlayer 插件中,浏览器是无法响应到玩家按的 Ctrl+W,因为消息已经被 Unity WebPlayer 截获并处理了;但是当焦点在包含 Unity WebPlayer 的网页中,浏览器便能响应到玩家按的 Ctrl+W,浏览器便会直接响应这个消息将该网页关闭。

我们无法在浏览器中截获关闭、刷新、跳转等消息,然后将焦点还给 Unity WebPlayer,只能截获这些消息,给玩家一个提示:“是否要关闭网页?”,防止玩家的误操作。

解决方法

如果要在浏览器中截获关闭、刷新、跳转等消息,可以在 body 中加入以下代码:

1
2
3
4
5
6
7
<script language="JavaScript">
    window.onbeforeunload = confirmExit;
    function confirmExit()
    {
        return "是否要关闭网页?";
    }
</script>

实际测试

例子:onbeforeunload DEMO

经实测在 IE6、IE8、IE9、Firefox13、Chrome18、Chrome20 中有效,可以在关闭、刷新时弹出对话框提醒。

但是在 360、傲游、搜狗 等多核浏览器中由于其使用了框架技术,会由优先响应关闭消息,网页会直接关闭——但同时网页也响应了消息,弹出对话框询问是否关闭,可悲剧的是网页已经关闭了,所以无效。

参考资料