ツイートする このエントリーを含むはてなブックマーク [rNote Tips]

<a href="javascript:~">で実行するJavaScriptのバグ回避 / 2009-03-30 (月)

rNoteの記事の中で新規ウィンドウをJavaScriptで開くなどをするときに
リンク部分に/が入ってしまい、意図しない動きやJavaScriptのエラーが
発生してしまいます。

これを回避するにはrnote.phpに以下の修正を行うことで回避できます。

修正個所はrnote.phpの約155行目で、青字のコードを追加すればOKです。
このコードでは../の先頭に/が付いてしまうバグも修正しています。

rnote.php
151: // Relative path -> Absolute path
152: function ChangeFullUrl(&$a){
153:     SplitPath($_SERVER['PHP_SELF'],$base,$tmp);
154:     $a = str_replace(REPLASE_CHAR,'',$a);
155:     while(preg_match('/<(?:a|img|link).+?(?:href|src|url)="(.*?)".*?>/s',$a,$tmp)){
156:         if(preg_match('/^(http|ftp|mailto|javascript|\.\.\/|\/)/s',$tmp[1])){        // exclude
157:             $a = str_replace($tmp[0],str_replace('<',REPLASE_CHAR,$tmp[0]),$a);
158:         }else{
159:             $repstr = preg_replace("/(href|src|url)=\"/s","\\1=\"".$base,$tmp[0]);
160:             $a = str_replace($tmp[0],str_replace('<',REPLASE_CHAR,$repstr),$a);
161:         }
162:     }
163:     $a = str_replace(REPLASE_CHAR,'<',$a);
164:     return;
165: }

この実装で<a href="javascript:~">のようなJavaScriptの
実行が出来るようになります。