Safari で Bookmarklet に '%' が含まれていると動かない【Safari】


はじめに

 前回のブックマークレットの記事を書いている途中で、Safari で動作確認をした際に、どうも動かないなあと思ったので調べてみました。

 Safari 限定です。確認した Safari のバージョンは14.1.2(15611.3.10.1.5, 15611)です。

動かない Bookmarklet

 以下のブックマークレットは動きませんでした。開発ツールのコンソールでは、期待通り最初の alert(); が実行されますが、ブックマークレットにすると動きません。

javascript:(function(){alert();return;const s='a';var a='a'.replaceAll(s,'%'+'20').replaceAll('/','%'+'2F');})();

 return; が入っているので、そこまでは動いて欲しい気がしたのですが、動きません。

動くようにするには

 どうも '%' が問題になっているようで、以下のようにしたら動作しました。

javascript:(function(){alert();return;const P=String.fromCharCode(0x25);const P1=P+'20';const P2=P+'2F';const s='a';var a='a/'.replaceAll(s,P1).replaceAll('/',P2);alert(a);})();