Как остановить выгрузку страницы с помощью стандартизированного JavaScript (не `onbeforeunload`) - PullRequest
0 голосов
/ 07 ноября 2011

Перед тем, как связать меня, я прочитал такие вопросы, как Как мне остановить загрузку страницы (навигацию) в JS? , но они касаются HTML4 и ниже. Я хочу получить ответ, который использует атрибут события HTML5 onunload. Я также хочу, чтобы это было как можно более чисто, то есть без внешних библиотек или плагинов, таких как jQuery или Flash, и только с использованием стандартизированного кода ( PURE HTML, CSS и JavaScript, ничего не зависящего от платформы).

Прежде чем вы скажете мне использовать onbeforeunload, обратите внимание, что это НЕСТАНДАРТ , и, следовательно, не соответствует моим критериям, как описано выше. Он НЕ работает во всех браузерах, особенно в тех, которые были сделаны до того, как 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>

Рабочий пример

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Вы должны использовать onbeforeunload, чтобы запросить у пользователя сообщение.

0 голосов
/ 07 ноября 2011

Вы не можете полностью предотвратить это, однако можете уведомить пользователя через всплывающее окно о том, что он не должен перезагружаться.Это делается с помощью события окна onbeforeunload, лучше всего задокументированного как MDN .

. Это будет вести себя точно так же, как здесь, в Stackoverflow, если вы добавите некоторый текст в текстовое поле ответа и затем попытаетесь покинутьстр.

...