#javascript #jquery #ajax #html5-history
#javascript #jquery #ajax #html5-история
Вопрос:
Я также пытаюсь изменить URL-адрес (без обновления страницы) после того, как я изменю свой DOM с помощью Ajax.
$("nav li").click(function(e) {
e.preventDefault();
var url;
var targetLocation = this.parentNode.attributes.href.value;
switch (targetLocation) {
case "index.html": url = "http://localhost:8080/home"; break;
case "app.html": url = "http://localhost:8080/api"; break;
case "contact.html": url = "http://localhost:8080/contact"; break;
}
$.ajax({
type: "GET",
dataType: "text",
url: url,
context: document.body,
success: function(data) {
$("div").text(data);
history.pushState("", "", targetLocation);
}
})
})
Но я получаю сообщение об ошибке, в котором говорится:
Uncaught DOMException: failed to execute "pushState" on "History": A history state object with URL "file:///C:/test/app.html" cannot be created in a document with origin "null" and URL "file:///C:/test/index.html".
Ответ №1:
Ваш код не включает их, но ваша ошибка предполагает, что вы работаете с локальными файлами. Браузеры не поддерживают операции с историей URL-адресов локальной файловой системы.
Модель безопасности для URL-адресов file:// не подлежит восстановлению. Вместо того, чтобы усложнять браузер особыми случаями для URL-адресов file://, мы решили отключить некоторые функции для URL-адресов file: //, допустив сбой класса проверок безопасности. К сожалению, pushState является одной из таких функций. Я бы рекомендовал не использовать URL-адреса file:// в вашем приложении.
https://bugs.chromium.org/p/chromium/issues/detail?id=301210
Не удалось найти ссылку на Firefox, но IIRC их поведение такое же, как у Chrome.
Комментарии:
1. Спасибо, Майк! Похоже, в этом и заключалась проблема. Я переместил свои файлы на сервер Apache, и теперь он работает. Ты лучший!