Javascript location.replace ошибка в Opera - PullRequest
3 голосов
/ 03 февраля 2012

Я делаю JS location.replace в Opera. Существует известная ошибка, что местоположение не заменяется, а обновляется при изменении только location.hash (см. http://my.opera.com/community/forums/topic.dml?id=568931).

Я пытался сделать следующий обходной путь:

var url = location.href.split("#")[0];
if (window.opera) {
  window.history.back();
}
location.replace(url + '#' + newhash);

К сожалению, это не похоже на работу. Прежде чем я начну экспериментировать с setTimeout, я хотел проверить, может быть, у кого-то есть идея получше.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Я думаю, что лучший обходной путь для этого - вообще не обходить его.

Причина: во-первых, скрипт, работающий на этой странице, должен быть прерван, если я использую кнопку возврата или вызывается history.back(). Следовательно, в вашем обходном пути выше сценарий (или должен) фактически прекратит работу перед вызовом location.replace(). Мы не можем вспомнить, что вы хотели вызвать location.replace () и сделать это на странице, на которую вы вернулись, потому что это было бы проблемой безопасности внедрения сценария.

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

Для правильного решения вы можете исследовать history.replaceState() - новый метод, указанный в HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-replacestate

0 голосов
/ 04 февраля 2012

Можете немного уточнить? Я взял пример из ссылки на форуме, которую вы разместили, и загрузил ее здесь: http://people.opera.com/miket/tmp/replace.html. В Opera 11.61 / Mac он работает, как и ожидалось.

Вы видите что-то другое? Можете ли вы объяснить свою проблему более подробно?

...