如何使用标准化JavaScript(而不是“onbeforeunload”)阻止页面卸载

如何使用标准化JavaScript(而不是“onbeforeunload”)阻止页面卸载,javascript,html,events,onunload,Javascript,Html,Events,Onunload,在您重新链接我之前,我已经阅读了一些问题,如,但它们涉及HTML4及以下。我想要一个利用HTML5事件属性onunload的答案。我还希望它尽可能的纯净,没有外部库或插件,比如jQuery或Flash,只使用标准化代码(pureHTML、CSS和JavaScript,不依赖于平台) 在您告诉我在卸载之前使用之前,请注意它是非标准的,因此不符合上述标准。它并不适用于所有浏览器,尤其是IE实现它之前的浏览器。 问题: 在我的网站上,我有几个音乐播放器,如果其中任何一个在用户试图导航离开页面时播放,

在您重新链接我之前,我已经阅读了一些问题,如,但它们涉及HTML4及以下。我想要一个利用HTML5事件属性
onunload
的答案。我还希望它尽可能的纯净,没有外部库或插件,比如jQuery或Flash,只使用标准化代码(pureHTML、CSS和JavaScript,不依赖于平台)

在您告诉我在卸载之前使用
之前,请注意它是非标准的,因此不符合上述标准。它并不适用于所有浏览器,尤其是IE实现它之前的浏览器。

问题:
在我的网站上,我有几个音乐播放器,如果其中任何一个在用户试图导航离开页面时播放,我想弹出一个对话框,确保他们有意这样做,并且他们理解这将停止音频流,如果他们选择“是”或“确定”,它将继续导航,但如果他们单击“否”或“取消”,它将保持在同一页面上,并不间断地播放音频如何使用JavaScript取消页面卸载而不使用
ONBEFOREUNLOAD

迄今为止的代码
到目前为止,我有以下代码,但不知道如何停止卸载:

<!DOCTYPE HTML><html>
<head>
    <script><!-- Loading Scripts -->
    function unloadTasks(){
        window.alert(":" + playing + ":");
        if (playing && !window.confirm("A podcast is playing, and navigating away from this page will stop that. Are you sure you want to go?"))
            window.alert("Here is where I will stop the page from unloading... somehow");
    }
    </script>
    <script><!-- Player Scripts -->
    var playing = false;
    function logPlay(){
        playing = isPlaying("e1audPlayer");
    }
    function isPlaying(player){
        return document.getElementById(player).currentTime > 0 && !document.getElementById(player).paused && !document.getElementById(player).ended;
    }
    </script>
</head>
<body onunload="unloadTasks()">
<audio id="e1audPlayer" style="width:100%;" controls="controls" preload="auto" onplaying="logPlay()" onpause="logPlay()">
    <source src="http://s.supuhstar.operaunite.com/s/content/pod/ADHD Episode 001.mp3" type="audio/mpeg"/>
    <source src="http://s.supuhstar.operaunite.com/s/content/pod/ADHD Episode 001.ogg" type="audio/ogg"/>
    Your browser does not support embedded audio players. Try <a href="http://opera.com/">Opera</a> or <a href="http://chrome.com/">Chrome</a>
</audio>
<a href="http://example.com/">Link away</a>
</body>
</html>

函数unloadTasks(){
窗口提示(“:”+播放+“:”);
if(播放&&!window.confirm(“正在播放播客,离开此页面将停止播放。是否确实要继续?”)
alert(“在这里,我将以某种方式阻止页面卸载”);
}
var=false;
函数logPlay(){
播放=显示(“e1audPlayer”);
}
功能显示(播放器){
return document.getElementById(player).currentTime>0&&!document.getElementById(player).暂停&&!document.getElementById(player).结束;
}
或

您应该使用onbeforeunload向用户提示消息

您不能完全阻止这一点,但是可以通过弹出窗口通知用户不应重新加载。这是通过onbeforeunload窗口事件完成的,最好记录在


如果您将一些文本添加到应答文本区域,然后尝试离开页面,则这将与Stackoverflow上的行为完全相同。

您需要在卸载前
打开
,而不是
打开卸载
onunload
在浏览器已承诺卸载页面后触发,并且无法请求取消。请参阅我在
onbeforeunload
上的编辑。如果您不能使用
onbeforeunload
,我认为没有任何方法可以完成您想要的操作。在onbeforeunload中使用警报实际上并不可靠。最后一个Mozilla浏览器禁用了此功能。@FloydThreepwood否我在哪里提到警报。不应该有理由使用unbeforeunload发出警报,消息应该在onbeforeunload提示符中。@epascarello没有链接,也没有代码,我只是假设了这一点提示某事也有多种含义。抱歉,从另一个角度看。@Supuhstar如果没有这个事件,这是不可能的。你不能停止卸载,在你试图阻止它的时候已经太晚了。您不能使web应用程序像客户端应用程序一样工作。你被你所处的环境所束缚,只能使用他们给你的工具。@epascarello我知道。。。这就是为什么我问他们给我的工具是否可以停止卸载。没有办法解决你的问题。请记住:你在使用网络,一个不可思议的、动态的、自由的媒介,有时也是分裂的、破碎的、可怕的。试着重新思考你的推理,实现可用性的可能性总是很多的。