mixiから外部リンクへの移行を簡単にするスクリプト@Safari
SafariにもCreammonkeyというFirefoxのGreasemonkeyに相当する、特定のページで任意のJavascriptを実行するプラグインが存在する。この話は以前、Safariでの環境構築をした際にも書きましたね。
しかし、このCreammonkey上で今までFirefoxで使ってきた.user.jsファイルを動作させてみても、ほとんどが動作しないんです。これについて、いろいろ調べてみたんだけど、SafariではJavascriptの挙動が他のブラウザ(特にここではFirefox)と異なるからみたい。例えば、下にも出てくるescape関数などが挙げられます。他にも、GreasemonkeyではAjaxで有名なXmlHttpRequestがセキュリティ上の観点からGM_xmlhttprequestという独自のものを使っていたりするので、これを使っている.user.jsファイルは動作しないと思います。
ここら辺を考慮しつつ、今まで使っていた.user.jsファイルを修正できたらいいのではないかなぁ。ま、そこら辺はお遊び程度においおいやっていくつもり。
んで、せっかくだから今まで使っていた.user.jsファイルを1つ試しに修正してみました。以下のサイトで配布されている「mixiから外部リンクへの移行を簡単にするスクリプト」です。
参考:mixiから外部リンクへの移行を簡単にするスクリプト AutomaticMoving@Mixi 0.1 - ヽ(´・肉・`)ノ日誌
修正前
// ==UserScript== // @name automatic moving @mixi // @description automatic moving script to an external link // @namespace http://niku.name/ // @include http://mixi.jp/view_diary.pl?url=* // @include http://mixi.jp/new_friend_diary.pl* // ==/UserScript== // style definition for external url // Ex. //var external_url_style = 'font-weight:bold; font-style:italic;'; //var external_url_style = 'background-color:yellow;'; var external_url_style = 'border-style:solid;border-width:1px 1px 0 1px;'; (function (){ var anchor = document.getElementsByTagName('A'); if(document.URL.match(/new_friend_diary.pl/)) { for(i=0; i<anchor.length; i++) { var diary_url = anchor[i].href; if(diary_url.match(/view_diary/)&&diary_url.match(/url=/)) { anchor[i].innerHTML='<span style="'+external_url_style+'">'+anchor[i].innerHTML+'</span>'; } } } if(document.URL.match(/view_diary.pl/)) { var start_external_url = document.URL.indexOf("http",4); var end_external_url = document.URL.indexOf("&owner",0); var external_url = unescape(document.URL.substring(start_external_url,end_external_url)); for(i=0;i<anchor.length;i++) if(anchor[i].href==external_url) location.replace(anchor[i].href); } })();
修正後
// ==UserScript== // @name automatic moving @mixi // @description automatic moving script to an external link // @namespace http://niku.name/ // @include http://mixi.jp/view_diary.pl?url=* // @include http://mixi.jp/new_friend_diary.pl* // ==/UserScript== // style definition for external url // Ex. //var external_url_style = 'font-weight:bold; font-style:italic;'; //var external_url_style = 'background-color:yellow;'; var external_url_style = 'border-style:solid;border-width:1px 1px 0 1px;'; (function (){ var anchor = document.getElementsByTagName('A'); if(document.URL.match(/new_friend_diary.pl/)) { for(i=0; i<anchor.length; i++) { var diary_url = anchor[i].href; if(diary_url.match(/view_diary/)&&diary_url.match(/url=/)) { anchor[i].innerHTML='<span style="'+external_url_style+'">'+anchor[i].innerHTML+'</span>'; } } } if(document.URL.match(/view_diary.pl/)) { var start_external_url = document.URL.indexOf("http",4); var end_external_url = document.URL.indexOf("&owner",0); var external_url = decodeURI(document.URL.substring(start_external_url,end_external_url)); for(i=0;i<anchor.length;i++) if(anchor[i].href==external_url) location.replace(anchor[i].href); } })();
具体的には、下から6行目のunescape関数をdecodeURI関数に書き換えただけです。Safariではescape関数の動作が他のブラウザと異なることもあり、文字コードを違って認識してしまうために、上のスクリプトが動作してなかったと考えられます。
うまく動作するようになったのは良いんですが、如何せんGreasemonkeyに比べて、重いんですよね〜。やはり、Creammonkeyはまだ発展途上だし、頼りっきりにしていいソフトではないのかもしれないな〜。