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

Вид: 17142|Ответ: 2

[HTML/HTML5] HTML не обновляет для изменения URL-адреса

[Скопировать ссылку]
Опубликовано 12.09.2017 13:55:04 | | | |

Появилось с Gecko2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)

HTML5 вводит два метода: histtory.pushState() и history.replaceState(), которые позволяют добавлять и изменять сущности истории. В то же время эти методы работают с событием window.onpostate.

Модифицировать реферер с помощью метода history.pushState(), который можно использовать в http-заголовке, созданном для объекта xmlhttpRequest после изменения состояния. Этот реферер будет URL документа при создании XMLHttpRequest.

pushState используется для добавления записи текущей страницы в историю, в то время как replaceState и pushState используются одинаково, единственное отличие в том, что он используется для изменения записи текущей страницы в истории.

пример
Предположим http://mozilla.org/foo.html страница выполняет JS

var stateObj = { foo: "bar" }; history.pushState(stateObj, «страница 2», «bar.html»);
Этот метод заставит строку URL отображать http://mozilla.org/bar.html,Но браузер не загружает bar.html страницу, даже если она существует

Теперь снова предположим, что пользователь продолжает пользоваться http://google.com и кликает обратно. В этот момент URL-адресная строка, http://mozilla.org/bar.html, страница получит событие popstate (Chrome), которое будет содержать копию stateObj. Эта страница выглядит как foo.html. +

В этот момент мы снова кликаем назад, и URL поворачивается, http://mozilla.org/foo.html,document появляется ещё одно событие popstate и объект null state. Это действие возврата не меняет содержание документа. (Возможно, через некоторое время он попытается загрузиться...) хром)

Метод pushState
pushState() имеет три параметра: объект состояния, заголовок (теперь игнорируется, не обрабатывается), URL (необязательно). Конкретики:

·        объект состояния – объект состояния является объектом Javascrip{filter}t, который связан с новой исторической сущностью, созданной методом pushState(). Используется для хранения информации о записях, которые вы хотите вставить в историю. Объект State может быть любой строкой Json. Поскольку Firefox использует жёсткий диск пользователя для доступа к объекту состояния, максимальное пространство памяти этого объекта составляет 640k. Если оно больше этого значения, метод pushState() выдает исключение. Если вам действительно нужно больше места для хранения, используйте локальное хранилище.

·        Заголовок — Firefox сейчас игнорирует этот параметр, хотя он может быть использован в будущем. Самый безопасный способ использовать его сейчас — передавать пустую строку, чтобы предотвратить будущие изменения. Или можно выдавать короткий титул, указывающий штат

·        URL — этот параметр используется для передачи URL новой исторической сущности, обратите внимание, что браузер не загрузит этот URL после вызова метода pushState(). Но, возможно, через какое-то время он попытается загрузить этот URL. Например, после перезагрузки браузера новый URL может быть не абсолютным путём. Если это относительный путь, то он будет относительно существующего URL. Новый URL должен быть в кодомене с существующим, иначе pushState() выдаст исключение. Этот параметр необязательный, и если он пустой, он будет отображаться как текущий URL документа.

В некотором смысле, вызов метода pushState() похож на установку window.locatio{filter}n = «#foo», оба из которых создают и активируют ещё одну историю, связанную с текущим документом, но pushState() имеет дополнительные преимущества:

Новый URL может быть любым URL, находящимся в том же домене, что и текущий, в отличие от window.locatio{filter}n, который останется в том же документе, если установлен только хеш.

l Вы можете оставить URL без изменений, если это не нужно. Для сравнения укажите window.locatio{filter}n = "#foo"; Генерируются только новые исторические сущности, если ваш текущий хэш не #foo

Вы можете связывать произвольные данные с вашей новой исторической сущностью. При хеш-ориентированном подходе все релевантные данные должны быть закодированы в короткую строку.

Обратите внимание, что метод pushState() не обеспечивает время хешмены, даже если старые и новые URL-адреса — это просто разные хеши.

метод replaceState()
history.replaceState() используется примерно так же, как pushState(), только replaceState() используется для изменения текущей исторической сущности, а не для создания новой. Этот метод иногда может быть полезен, когда необходимо обновить объект состояния или текущую историю в ответ на определённое поведение пользователя, и вы можете использовать его для обновления URL объекта состояния или текущей исторической сущности.

Событие Popstate
Когда сущность истории меняется, происходит событие popstate. Если сущность истории генерируется методами pushState и replaceState, атрибут состояния события popstate будет содержать копию объекта состояния из исторической сущности

Подробности смотрите на window.onpopstate

Читайте текущее состояние
Прочитайте существующее состояние

При загрузке страница может иметь объект состояния, не пустой. Это может происходить, когда страница устанавливает объект состояния (с помощью pushState или replaceState), и пользователь перезагружает браузер. Когда страница перезагружается, она получит событие загрузки, но события popstate не будет. Однако, если вы прочитаете свойство history.state, вы получите этот объект состояния после произошедшего события popstate


Документация History.pushState(): https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState



Параметр принимающего URL — это строка типа, которая используется для изменения URL текущей адресной строки. Стоит отметить, что этот параметр не может совпадать с кроссдоменным параметром, то есть протокол, доменное имя и порт должны совпадать друг с другом.

Незафиксированное DOMException: Не удалось выполнить 'pushState' на 'History': объект состояния истории с URL 'http://www.test.com/' не может быть создан в документе с источником ' https://www.itsvse.com' и URL 'https://www.itsvse.com/'.
    на <anonymous>:1:9



Правильный код:







Предыдущий:Baidu Maps получает координатные точки этой области
Следующий:Инженеры Huawei по ошибке удалили пользовательские данные, из-за чего 800 000 мобильных телефонов Guangxi Mobile не могли совершать звонки
Опубликовано 27.10.2017 9:51:10 |
Он довольно детализирован, неплохо
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com