このアイデアをFirefoxの拡張機能として実装したかったので、それを試みました。
警告、これはFirefoxの私の最初の拡張機能であり、2、3の夕方に書かれたものです。最終製品をすぐに提供するつもりはありませんが、プロトタイプを見せたいだけです。
アイデア
要するに:
- テキストがURLであるリンクを探します。
- href値が参照であるかどうかを確認します(アンカーがあることが判明する場合があります)。
- テキストとhrefのホストを比較します。
- 一致しない場合、大声で叫び、ユーザーを「左」に移動させません。
コード
var fishurl = {
onLoad: function () {
var appcontent = document .getElementById( "appcontent" );
if (appcontent)
appcontent.addEventListener( "DOMContentLoaded" , this .onDOMLoad, true );
},
onDOMLoad: function (e) {
if (e.originalTarget instanceof HTMLDocument) {
fishurl._parseDocument(e.originalTarget);
}
},
_parseDocument : function (doc) {
//
for ( var i = 0, l = doc.links.length, item, textUrl, hrefUrl; i < l; i++)
{
item = doc.links[i];
textUrl = this ._parseUrl(item.text);
// , URL
if (!textUrl)
continue ;
hrefUrl = this ._parseUrl(item.href);
// , href URL (, , )
if (!hrefUrl)
continue ;
// ,
if (textUrl.host != hrefUrl.host)
{
//
var _href = item.href;
// click
item.addEventListener(
"click" ,
function () {
// ,
if (confirm ( " ?\n[" + _href + "]" ))
gBrowser.selectedTab = gBrowser.addTab(_href);
return false ;
},
false );
// URL
item.removeAttribute( "href" );
item.setAttribute( "rel" , "nohref" );
// «»
item.style.cursor = "not-allowed" ;
//
item.style.textDecoration = "line-through" ;
}
}
},
_parseUrl: function (data) {
// regexp, !.. URL «», , — false
return data.match(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?([\w.-]+)(:[0-9]+)?(\/([\w#!:.?+=&%@!\-\/])*)?/) ?
{ url: RegExp[ '$&' ], schema: RegExp.$1, auth: RegExp.$2, host: RegExp.$3, port: RegExp.$4, path: RegExp.$5 } : false ;
}
};
// load
window.addEventListener( "load" , function () { fishurl.onLoad(); }, false );
* This source code was highlighted with Source Code Highlighter .
写真
そのため、これは(嫌な)これまでのところ、実際には見えます:
これは画像には表示されませんが、「悪い」リンクにカーソルを合わせると、バツ印の円の形になり、ここで刈り取るべきではないことを示唆します。
また、ユーザーがリンクをドラッグして( QuickDragなどの拡張機能を使用して)リンクをたどらないように、「#」がhrefに挿入されます(svn11から始まり、hrefは完全に削除されます)。
または、リンクに警告アイコンを表示することもできます。
次は?
誰かが興味を持っているなら、私はこれを続けます。 欲しいもの、好きではないものを書き、コードやロジックで何かはっきりしないことがあれば尋ねます。
当然、Narod.Diskから同じダウンロードを行う場合など、誤検出の問題があります。
したがって、おそらくブラックリストまたはホワイトリストを整理する必要があります。
入手先
ここからダウンロード: fishurl-svn12.xpi
私はBSDライセンスの下で配布していますので、興味があれば、xpiファイル(これはZIPアーカイブです)を開き、好きなことをしてください。
アイデアの作者( hooey )がそれを好まない場合は、もちろんこのビジネスを停止します;)
そして、彼のアイデア、そして彼が私の中でくつろぎたいという欲求を起こしたという事実と、 developer.mozilla.orgを読むのに魅力的な時間を与えてくれたことに、彼に感謝します。