Opera 11.50+ реализация history.replaceState () - PullRequest
0 голосов
/ 10 января 2012

Рассмотрим это jsfiddle: http://fiddle.jshell.net/maple/JbEJN/show/ (это окно результатов, для работы replaceState, см. фактическая скрипка с кодом здесь: http://jsfiddle.net/maple/JbEJN/).

Это простой элемент управления вкладкой javascript. Я нажимаю «Tab 1» и вижу содержимое одного div. Я нажимаю «Tab 2», чтобы скрыть отображаемый div и показать другой, с другим содержанием. Вы получаете тренировку, стандартный контроль вкладок.

Теперь, что я делаю , хочу использовать хештеги, чтобы иметь возможность добавлять закладки или связывать страницу с определенной выбранной вкладкой. Чего я не хочу, так это создания записи истории браузера каждый раз, когда я переключаюсь между вкладками, чтобы при нажатии назад мне приходилось обходить 10 вкладок, прежде чем я действительно смогу вернуться на страницу, с которой пришел .

Я собираюсь реализовать это, используя replaceState (), когда я переключаюсь между вкладками, чтобы вставить хэш-тег в URL страницы, например:

window.history.replaceState(null, '', '#tabname');

Здесь я ожидаю, что при переключении между вкладками записи истории не создаются, поэтому, когда я переключаюсь несколько раз между вкладками, я вижу изменение хэш-метки, но когда я нажимаю кнопку возврата, я просто возвращаюсь к предыдущему. страница (или ничего не происходит, если я открыл тестовую страницу в новом окне).

Это прекрасно работает в Chrome, Firefox и Safari, но не в Opera 11.50 и 11.60. Насколько я знаю, Opera утверждает, что полностью поддерживает API истории в Opera, но в Opera происходит то, что replaceState () работает как pushState (), записи помещаются в историю.

Это ошибка в Opera, или я должен использовать API в Opera другим способом?

1 Ответ

0 голосов
/ 13 января 2012

Полагаю, что здесь происходит то, что действие по умолчанию для события click - активировать ссылку - поэтому после вызова replaceState () действие по умолчанию обновит URL, добавит #tabname и создаст запись в истории.Попробуйте использовать event.preventDefault(): http://jsfiddle.net/JbEJN/8/show/

Я не уверен, почему ваш исходный код работал так, как задумано в Chrome и Firefox.Предположительно, они не создают запись истории, если replaceState () уже обновил URL, и активация ссылки не изменит его?Если это так, Opera, вероятно, должна измениться, чтобы соответствовать им.Не могли бы вы сообщить об этом как о проблеме на https://bugs.opera.com/wizard/?Если вы дадите мне идентификационный номер ошибки, я сообщу.

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