Opera-10, заставляем забывать про #… часть URL

Firefox, Opera, Chromium и прочее.

Модератор: /dev/random

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Opera-10, заставляем забывать про #… часть URL

Сообщение ZyX »

Собственно, проблема в том, что после перехода на фрагмент (#… часть согласно
Wikipedia называется именно так) этот фрагмент становится ненужен и только
мешается при обновлении страницы или перезапуске Opera, форсируя ненужный
прыжок. У меня есть подозрение, что от него можно избавиться с помощью
JavaScript. Есть ли готовые скрипты для этого? Или какой-либо другой способ
сделать то же самое?
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Opera-10, заставляем забывать про #… часть URL

Сообщение allez »

Никак не могу отделаться от ощущения, что вы хотите чего-то странного. Видите ли, при обновлении страницы браузер обязан отобразить ее так, как указано в URL и не иначе, а уж тем более не вносить изменения в этот самый URL. Представьте себе, что вы, просматривая эту тему, нажали F5, а вас вынесло на начальную страницу форума. Не очень-то логично, правда? Между тем вы хотите того же самого, только в пределах одной страницы, а не сайта целиком.

Но со всем тем могу сказать, что способ решения вашей проблемы все же существует. Он заключается в том, чтобы руками удалить из URL имя ссылки-якоря вместе со знаком "#". После этого при обновлении браузер отобразит начало страницы.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5441
ОС: Gentoo

Re: Opera-10, заставляем забывать про #… часть URL

Сообщение /dev/random »

btw, разные браузеры обрабатывают обновление страницы с якорем по-разному.
firefox (современные версии) прокручивает страницу к якорю _только вниз_. Если она уже ниже якоря, она не будет прокручена. Старые версии вообще не прокручивали её при обновлении. Хромиум раньше пркручивал всегда, сейчас от этого отошли (точно не помню, как именно). Возможно, другие версии оперы тоже работают именно так, как вам надо. Вы случайно не бетой пользуетесь?
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Opera-10, заставляем забывать про #… часть URL

Сообщение ZyX »

/dev/random писал(а):
12.04.2010 21:29
btw, разные браузеры обрабатывают обновление страницы с якорем по-разному.
firefox (современные версии) прокручивает страницу к якорю _только вниз_. Если она уже ниже якоря, она не будет прокручена. Старые версии вообще не прокручивали её при обновлении. Хромиум раньше пркручивал всегда, сейчас от этого отошли (точно не помню, как именно). Возможно, другие версии оперы тоже работают именно так, как вам надо. Вы случайно не бетой пользуетесь?

Последней нестабильной версией из репозиториев. Впрочем, все стабильные версии
вели себя точно так же. Opera у меня не прокручивает если элемент и так виден.


allez писал(а):
12.04.2010 21:21
Никак не могу отделаться от ощущения, что вы хотите чего-то странного. Видите ли, при обновлении страницы браузер обязан отобразить ее так, как указано в URL и не иначе, а уж тем более не вносить изменения в этот самый URL. Представьте себе, что вы, просматривая эту тему, нажали F5, а вас вынесло на начальную страницу форума. Не очень-то логично, правда? Между тем вы хотите того же самого, только в пределах одной страницы, а не сайта целиком.

Но со всем тем могу сказать, что способ решения вашей проблемы все же существует. Он заключается в том, чтобы руками удалить из URL имя ссылки-якоря вместе со знаком "#". После этого при обновлении браузер отобразит начало страницы.

Однако он отобразит начало, а не то что, я смотрю сейчас. Возможно, логичнее
как-то перехватывать открытие страницы и удалять эту часть до загрузки,
перематывая JavaScript’ом.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Opera-10, заставляем забывать про #… часть URL

Сообщение ZyX »

Сейчас подумал, возможно и такое решение: ко всем жестам и клавишам, к которым
привязано действие «Reload» привязать какую-нибудь функцию на JavaScript.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Opera-10, заставляем забывать про #… часть URL

Сообщение ZyX »

Вот этот 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

Сообщение ZyX »

У меня вопрос: что делать, если функция ObjectPosition для тёгов вида
„<a name="anchor"></a>“ возвращает 0. Метод scrollIntoView также не работает.
В chromium всё нормально. Сообщение об ошибке команде Opera уже отправлено.
Спасибо сказали: