Нулевое состояние API истории - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь изменить 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 Ответ

2 голосов
/ 14 марта 2019

Ваш код не включает их, но ваша ошибка предполагает, что вы работаете с локальными файлами.Браузеры не поддерживают хронологические операции с локальными URL-адресами файловой системы.

Модель безопасности для файла: // URL-адреса повреждены и не подлежат восстановлению.Вместо того, чтобы усложнять браузер особыми случаями для URL-адресов file: //, мы решили отключить некоторые функции для URL-адресов file: //, сделав проверку класса безопасности неудачной.К сожалению, pushState является одной из таких функций.Я бы рекомендовал не использовать file: // URL в вашем приложении.

https://bugs.chromium.org/p/chromium/issues/detail?id=301210

Не удалось найти ссылку на Firefox, но IIRC их поведение такое же, какChrome.

...