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 を使用すると、不思議なことに false の戻り値が無効になるため、より効率的です。
ここでは、本当の最終的な目的を知らずに、「リンクをたどるかどうか」という動作を使用しました。
コメントで指摘されているように、RE は、href の代わりにホスト名を使用することで、より簡単にすることができます...既にコード化されており、他の場合に役立つ可能性があるため、そのままにしておきます。
どちらの場合も、ローカルホスト、IP アドレス、ポートなどの特殊なケースを処理するために、いくつかの特別な予防措置を講じる必要があります...
質問を読み直して問題がないことを確認する前に、ドメイン名を削除しました...まあ、おそらくそれは他の誰かに役立つ可能性があります。
注: リンクを装飾するために、質問で同様の解決策を示しました: Editing all external links with javascript