Вызов history.pushState () внутри нового документа, созданного document.write (), вызывает SecurityError в Internet Explorer 11 - PullRequest
0 голосов
/ 08 октября 2018

Возьмите следующий код и передайте его через веб-сервер , например http-server (пакет Node).У меня есть пример сервера здесь .

<meta http-equiv="Cache-Control" content="max-age=0"/>
<script>
window.onload = function() {
    document.write('<script>history.pushState(null, null, "bar.html");console.log("passed");\u003c/script>');
}
</script>

Обратите внимание, что заголовок Cache-Control есть, потому что IE агрессивно кэширует страницу по какой-то причине.Это помогло мне во время тестирования, но не обязательно воспроизвести проблему.

Когда я загружаю страницу в IE11 (Windows 10), я получаю SecurityError, напечатанный на консоли, без изменения URLи «пропущено» не печатается.

В Edge 16 я «пропускаю» распечатанный на консоль, но URL-адрес не изменяется.

В Firefox и Chrome это работает нормально: URL-адресизменения и я "пропущен" напечатан на консоли.

Почему IE ведет себя таким образом, и как я могу использовать document.write() в сочетании с pushState()?Я хочу переписать весь документ, а не просто добавить к нему (вот почему я использую window.onload).

1 Ответ

0 голосов
/ 10 октября 2018

Попробуйте добавить Try ... Catch в ваш код, а затем попробуйте сделать тест с IE11.

<html>
<body>
<script>
try {
history.pushState(null, null,"bar.html");
console.log("passed");
}
catch(err) {
    document.getElementById("demo").innerHTML = err.message;
}
</script>
</body>
</html>

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...