【发布时间】:2010-04-14 04:39:06
【问题描述】:
我有以下 userjs,旨在删除 URL 的锚部分,但仍跳转到它:
// ==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) {
document.location.replace(match[1]);
sessionStorage.setItem("anchor", match[2]);
}
window.addEventListener("load", (function() {
var anchor=sessionStorage.getItem("anchor");
if(anchor!==null) {
var obj=document.anchors.item(anchor);
// 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);
})()
问题是,如果我有一个空的<a> 标记并设置了名称,它将无法跳转。 obj.scrollIntoView() 也失败了。
Opera-10.52_pre6306,Gentoo。
【问题讨论】:
-
一目了然,你想要 document.anchors.namedItem(anchor) 而不是 document.anchors.item(anchor)
-
问题是,如果我输入
alert(obj.outerHTML),我会得到正确的项目,比如<a name="tab-top"></a>。但是为了滚动,我必须在前面加上obj.innerHTML="a";,否则它会失败。如果我没有 emtydiv或a,它工作正常。而且,是的,你的建议没有帮助。 -
我想这可能是一个歌剧错误。
标签: javascript anchor opera userjs