我将在更新中回答有关 IE 事件的问题:
function track_file(evt)
{
if (evt == undefined)
{
evt = window.event; // For IE
}
// Use evt
}
是跨浏览器获取一致事件对象的经典方法。
在那之后,我会使用正则表达式来规范化 URL,但我不确定你在看什么。
[编辑] 一些真正的代码可以将我上面写的内容付诸实践...... :-)
function CheckTarget(evt)
{
if (evt == undefined)
{
// For IE
evt = window.event;
//~ event.returnValue = false;
var target = evt.srcElement;
var console = { log: alert };
}
else
{
target = evt.target;
//~ preventDefault();
}
alert(target.hostname + " vs. " + window.location.hostname);
var re = /^https?:\/\/[\w.-]*?([\w-]+\.[a-z]+)\/.*$/;
var strippedURL = window.location.href.match(re);
if (strippedURL == null)
{
// Oops! (?)
alert("Where are we?");
return false;
}
alert(window.location.href + " => " + strippedURL);
var strippedTarget = target.href.match(re);
if (strippedTarget == null)
{
// Oops! (?)
alert("What is it?");
return false;
}
alert(target + " => " + strippedTarget);
if (strippedURL[1] == strippedTarget[1])
{
//~ window.location.href = target.href; // Go there
return true; // Accept the jump
}
return false;
}
那是测试代码,而不是生产代码,很明显!
带有 //~ 注释的行显示了阻止单击链接进行跳转的替代方法。不知何故,它更有效,因为如果我使用 Firebug 的 console.log,奇怪的是 return false 是无效的。
我在这里使用了“是否关注链接”的行为,不知道真正的最终目的。
正如评论中所指出的,RE 可以通过使用主机名而不是 href 更简单......我保留它是因为它已经编码并且可能在其他情况下有用。
在这两种情况下都应该采取一些特殊的预防措施来处理特殊情况,比如本地主机、IP 地址、端口......
我去掉了域名,然后重新阅读问题并看到它没有问题......好吧,也许它对其他人有用。
注意:我在装饰链接的问题中展示了类似的解决方案:Editing all external links with javascript