Заставить оперу забыть о позиции в гиперссылке
Как заставить оперу забыть о "позиционной" части гиперссылки сразу после ее следования? (Это полезно, когда я хочу перезагрузить страницу и сохранить позицию, где я читаю, в то время как исходная ссылка имеет свою собственную указанную позицию.)
Opera-10.52_pre6272, Gentoo
3 ответа
Этот 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);
})()
Если вы имеете в виду, что перешли по ссылке с указанным фрагментом (часть после знака хеша), почему бы просто не нажать F5, чтобы перезагрузить страницу? Собираетесь ли вы в адресную строку и нажимаете Enter или что-то еще?
Я просто попробовал еще раз, и Opera сделала, как вы сказали, - когда я перезагрузил компьютер, он перешел к идентификатору фрагмента в URL. Я не знаю, почему я не заметил этого раньше - возможно, потому что это недавнее изменение, и я не часто обновляю страницу, на которой я нахожусь в процессе чтения. Я бы посчитал это ошибкой - возможно, вы хотели бы сообщить об этом в Opera Software? Я могу подтвердить то же поведение в версии для Windows (10.51).
В любом случае, вот обходной путь: когда я собираюсь изменить масштаб, который иногда заставляет меня потерять свое место, я выбираю некоторый текст (предпочтительно несколько слов из одного абзаца) и копирую его в буфер обмена. Затем, после изменения масштаба (или, в вашем случае, перезагрузки), я ищу только что скопированный текст (Ctrl+F).