Консультация № 160329
12.02.2009, 20:56
0.00 руб.
0 6 1
Добрые сутки, уважаемые эксперты! Подскажите, почему код в приложении работает в ИЕ, но не работает в Опере? Т.е. почему Опера не отрабатывает location.replace?

Приложение:
<script language=JavaScript><!--
function goTo(where) {
document.location.replace(where);
return false;
}
//--></script>

<a href=#aaa onClick="return goTo('#aaa')">AAA</a>
<a href=#bbb onClick="return goTo('#bbb')">BBB</a>

Обсуждение

Неизвестный
13.02.2009, 08:14
общий
это ответ
Здравствуйте, Дмитрий Сташенко!
Коллега, данная неприятность устраняется, если чуть-чуть модифицировать Ваш код. Вместо [b]document.location.replace(where)[/b] лучше написать [b]document.location.href = where[/b]. Такой код не зависит от браузера, насколько я знаю, и работает везде. Я проверял Ваш способ по книжке, но про работу метода в Opera там ничего нет, к сожалению.
Еще совет - проверьте, нет ли в Вашем коде каких-либо синтаксических ошибок ВЫШЕ того места, где запускается replace. И вообще, убедитесь в том, что не работает именно replace, а не остальной код, следующий за ним в скрипте.

С уважением, Товарищ Бородин
Неизвестный
13.02.2009, 12:25
общий
Товарищ Бородин, так вроде ошибок искать и негде. Вот текст целиком:

<HEAD>
<script language=JavaScript>
function goTo(where) {
window.location.replace(where);
return false;
}
</script>
</HEAD>
<BODY>
<a href=#aaa onClick="return goTo('#aaa')">AAA</a>
<a href=#bbb onClick="return goTo('#bbb')">BBB</a>
</BODY>

по location.href будет просто переход по ссылке с занесением в историю, а интересен именно replace(), так как в историю не надо добавлять якорь.
может, я неправильно выразился? Replace() работает, но неверно, т.е. переход к якорю есть, но и история добавляется, а не замещается.
Причем, проблема оказалась довольно обширнее, чем на первый взгляд. Суть в следующем: не зависимо от того, есть ли якоря на странице, ни Опера, ни Сафари не заменили историю, ИЕ заменил историю только если якорей, на которые ссылаются ссылки (простите за тавтологию), нет на странице, а если есть, то он тоже добавляет ее, а не замещает. И только стойкий ФФ отработал Replace() верно и если есть якоря, и если их нет.
Неизвестный
13.02.2009, 12:41
общий
То есть, это действительно одно-единственное место, где присутствует Javascript-код? Я ведь говорю не про ошибки в функции, а про ошибки вообще...
А что Вы видите, когда пытаетесь пройти по якорям? И еще - это у Вас где-нибудь в интернете на сервере есть или на локале пока что? Попробуйте активировать консоль ошибок в Oper`е, может быть, если есть какой-то неизвестный браузеру вызов или ошибка(с его точки зрения), то он укажет в это место...
Неизвестный
13.02.2009, 12:49
общий
Это текст целиком. Отредактировал пост выше, проблема шире, как обычно :)
Говоря о наличии якорей, имею ввиду, что перед </BODY> добавляю еще
<A name=aaa>aaa</A>
<A name=bbb>bbb</A>
Неизвестный
13.02.2009, 12:55
общий
Причем если нет якорей, ИЕ не добавляет историю даже если использовать location.href = where, а не replace()
Неизвестный
13.02.2009, 13:14
общий
Да, теперь видно, что мы действительно говорили о разных вещах...
Форма ответа