Собственно, проблема в том, что после перехода на фрагмент (#… часть согласно
Wikipedia называется именно так) этот фрагмент становится ненужен и только
мешается при обновлении страницы или перезапуске Opera, форсируя ненужный
прыжок. У меня есть подозрение, что от него можно избавиться с помощью
JavaScript. Есть ли готовые скрипты для этого? Или какой-либо другой способ
сделать то же самое?
Opera-10, заставляем забывать про #… часть URL
Модератор: /dev/random
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Opera-10, заставляем забывать про #… часть URL
Никак не могу отделаться от ощущения, что вы хотите чего-то странного. Видите ли, при обновлении страницы браузер обязан отобразить ее так, как указано в URL и не иначе, а уж тем более не вносить изменения в этот самый URL. Представьте себе, что вы, просматривая эту тему, нажали F5, а вас вынесло на начальную страницу форума. Не очень-то логично, правда? Между тем вы хотите того же самого, только в пределах одной страницы, а не сайта целиком.
Но со всем тем могу сказать, что способ решения вашей проблемы все же существует. Он заключается в том, чтобы руками удалить из URL имя ссылки-якоря вместе со знаком "#". После этого при обновлении браузер отобразит начало страницы.
Но со всем тем могу сказать, что способ решения вашей проблемы все же существует. Он заключается в том, чтобы руками удалить из URL имя ссылки-якоря вместе со знаком "#". После этого при обновлении браузер отобразит начало страницы.
-
/dev/random
- Администратор
- Сообщения: 5441
- ОС: Gentoo
Re: Opera-10, заставляем забывать про #… часть URL
btw, разные браузеры обрабатывают обновление страницы с якорем по-разному.
firefox (современные версии) прокручивает страницу к якорю _только вниз_. Если она уже ниже якоря, она не будет прокручена. Старые версии вообще не прокручивали её при обновлении. Хромиум раньше пркручивал всегда, сейчас от этого отошли (точно не помню, как именно). Возможно, другие версии оперы тоже работают именно так, как вам надо. Вы случайно не бетой пользуетесь?
firefox (современные версии) прокручивает страницу к якорю _только вниз_. Если она уже ниже якоря, она не будет прокручена. Старые версии вообще не прокручивали её при обновлении. Хромиум раньше пркручивал всегда, сейчас от этого отошли (точно не помню, как именно). Возможно, другие версии оперы тоже работают именно так, как вам надо. Вы случайно не бетой пользуетесь?
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Opera-10, заставляем забывать про #… часть URL
/dev/random писал(а): ↑12.04.2010 21:29btw, разные браузеры обрабатывают обновление страницы с якорем по-разному.
firefox (современные версии) прокручивает страницу к якорю _только вниз_. Если она уже ниже якоря, она не будет прокручена. Старые версии вообще не прокручивали её при обновлении. Хромиум раньше пркручивал всегда, сейчас от этого отошли (точно не помню, как именно). Возможно, другие версии оперы тоже работают именно так, как вам надо. Вы случайно не бетой пользуетесь?
Последней нестабильной версией из репозиториев. Впрочем, все стабильные версии
вели себя точно так же. Opera у меня не прокручивает если элемент и так виден.
allez писал(а): ↑12.04.2010 21:21Никак не могу отделаться от ощущения, что вы хотите чего-то странного. Видите ли, при обновлении страницы браузер обязан отобразить ее так, как указано в URL и не иначе, а уж тем более не вносить изменения в этот самый URL. Представьте себе, что вы, просматривая эту тему, нажали F5, а вас вынесло на начальную страницу форума. Не очень-то логично, правда? Между тем вы хотите того же самого, только в пределах одной страницы, а не сайта целиком.
Но со всем тем могу сказать, что способ решения вашей проблемы все же существует. Он заключается в том, чтобы руками удалить из URL имя ссылки-якоря вместе со знаком "#". После этого при обновлении браузер отобразит начало страницы.
Однако он отобразит начало, а не то что, я смотрю сейчас. Возможно, логичнее
как-то перехватывать открытие страницы и удалять эту часть до загрузки,
перематывая JavaScript’ом.
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Opera-10, заставляем забывать про #… часть URL
Сейчас подумал, возможно и такое решение: ко всем жестам и клавишам, к которым
привязано действие «Reload» привязать какую-нибудь функцию на JavaScript.
привязано действие «Reload» привязать какую-нибудь функцию на JavaScript.
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Opera-10, заставляем забывать про #… часть URL
Вот этот UserJS решает проблему:
Буду благодарен, если кто-нибудь расскажет мне о возможных побочных эффектах.
Код: Выделить всё
// ==UserScript==
// @name PurgeAnchor
// @include *
// ==/UserScript==
(function() {
var reg=/^(.*)\#(.*)$/;
var match=reg.exec(location);
function ObjectPosition(obj) {
var curtop = 0;
if(obj.offsetParent)
while(1)
{
curtop += obj.offsetTop;
if(!obj.offsetParent)
break;
obj = obj.offsetParent;
}
else if(obj.y)
curtop += obj.y;
return curtop;
}
if(match) {
location.href=match[1];
sessionStorage.setItem("anchor", match[2]);
}
window.addEventListener("load", (function() {
var anchor=sessionStorage.getItem("anchor");
if(anchor!==null) {
var obj=document.getElementById(anchor);
if(obj===null) {
obj=document.getElementsByName(anchor)[0];
}
var pos=0;
if(obj!==null) {
pos=ObjectPosition(obj);
window.scrollTo(0, pos);
}
sessionStorage.removeItem("anchor");
}
}), false);
})()Буду благодарен, если кто-нибудь расскажет мне о возможных побочных эффектах.
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Opera-10, заставляем забывать про #… часть URL
У меня вопрос: что делать, если функция ObjectPosition для тёгов вида
„<a name="anchor"></a>“ возвращает 0. Метод scrollIntoView также не работает.
В chromium всё нормально. Сообщение об ошибке команде Opera уже отправлено.
„<a name="anchor"></a>“ возвращает 0. Метод scrollIntoView также не работает.
В chromium всё нормально. Сообщение об ошибке команде Opera уже отправлено.