2

Как заставить оперу забыть о «позиционной» части гиперссылки сразу после ее следования? (Это полезно, когда я хочу перезагрузить страницу и сохранить позицию, где я читаю, в то время как исходная ссылка имеет свою собственную указанную позицию.)

Opera-10.52_pre6272, Gentoo

3 ответа3

0

Я просто попробовал еще раз, и Opera сделала, как вы сказали, - когда я перезагрузил компьютер, он перешел к идентификатору фрагмента в URL. Я не знаю, почему я не заметил этого раньше - возможно, потому что это недавнее изменение, и я не часто обновляю страницу, на которой я нахожусь в процессе чтения. Я бы посчитал это ошибкой - возможно, вы хотели бы сообщить об этом в Opera Software? Я могу подтвердить то же поведение в версии для Windows (10.51).

В любом случае, вот обходной путь: когда я собираюсь изменить масштаб, который иногда заставляет меня потерять свое место, я выбираю некоторый текст (предпочтительно несколько слов из одного абзаца) и копирую его в буфер обмена. Затем после изменения масштаба (или, в вашем случае, перезагрузки), я ищу только что скопированный текст (Ctrl+F).

0

Если вы имеете в виду, что перешли по ссылке с указанным фрагментом (часть после знака хеша), почему бы просто не нажать F5, чтобы перезагрузить страницу? Собираетесь ли вы в адресную строку и нажимаете Enter или что-то?

0

Этот 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);
 })()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .