WikipediaでURIエンコードされたページをURIデコードしたページに飛ばすスクリプト

どういうことなのか

タイトルどう書けばピンと来るだろうかと考えたんだけど、自分自身にすらピンとくるものが浮かばなかったw

Wikipediaに限らず他のWiki検索エンジンの結果、ブログなんかでもページのURIURIエンコードが使われているところは多いですよね。*1


例えば、フェンリル社の場合は以下のような感じですね。

http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%B3%E3%83%AA%E3%83%AB_(%E4%BC%81%E6%A5%AD)

でも、ブラウザによってはこういう感じでアクセスしても大丈夫です。

http://ja.wikipedia.org/wiki/フェンリル_(企業)

Chromeだとかはデフォルトで下のような感じになっていますしね。


少なくとも、Sleipnir2のSleipnir形式のブックマークなら "http://ja.wikipedia.org/wiki/フェンリル_(企業)" で登録していても繋がりますし、こちらの方が見栄えがよろしいので、私は専らURIデコードして利用しています。


で、Bookmarkletとかを使っていちいち変換するのもありですが、だんだんと面倒になってきて去年くらいにSeaHorseスクリプトで変換させることにしました。
ちなみに数日前にTwitterでちょいと晒したりしましたが、あれは会社のに入ってた初期版でしたwマズイ点がいくつかあります。


Wikipedia_Title_Decode.user.js

// ==UserScript==
// @name         Wikipedia Title Decode
// @include      http://ja.wikipedia.org/wiki/*%*
// @type         SleipnirScript
// ==/UserScript==

(function() {
	if(location.pathname.indexOf("%E") != -1){
		var uri = decodeURIComponent(document.getElementById("p-namespaces").getElementsByTagName("a")[0].href);
		var tmp = decodeURIComponent(sleipnir.api.URL);
		if(tmp.length == uri.length & tmp == uri) {
			sleipnir.api.Navigate(sleipnir.api.GetDocumentID(sleipnir.api.ActiveIndex), uri);
		}else {
			sleipnir.api.Navigate(sleipnir.api.GetDocumentID(sleipnir.api.ActiveIndex+1), uri);
		}
	
	}
}());

※注意点としてはURIエンコードの結果に"%E"が含まれない場合動かないはず。*2
※デコードした状態でも途中に"%E"が含まれるページがある場合、延々とスクリプトが実行されるはず。*3
※SDEのドラッグでバックグラウンド(=アクティブのチェック外してある状態)で開いた時に「タブの追加と削除」の設定次第では予期しないタブが遷移される可能性がある。*4

*1:wikipedia:URIエンコードに関してはWikipediaあたりでも参照してください

*2:ちゃんとRFCとか読めば、この懸念が正しいか分かるかもしれないけどねw

*3:そういうページを発見したときに対処考えます

*4:私は両方とも「アクティブなタブの右」にしてるのでそれでしか確認してない