SafariでUser JavaScriptを使う。

FirefoxのgreasemonkeyのようなUser JavaScriptをSafariで使うことができるCreammonkeyを試してみた。

当然JavaScript自体が完全互換ではないし、Greasmonkey用のスクリプトはFirefoxで、しかもローカル動作が前提なので盛大にエラーを吐き出すものもあるが、コンセプト部分のコアコードは結構動くスクリプトが多い。

例えば、Japanizeでは再帰置換で使ってるreplaceのコードの部分でちょっと問題があったりするが、おおむね良好。ローカルにスクリプトを引っ張ってきて、Safariで問題が発生しにくいように調整してみたりする。

うん、これはおもしろいよ。なんだか、仲間入りできた感じ。

追記

Japanize開発者のKazuhoさんがブックマークで反応されているので、reproduce。

bug reproduce for Japanize

/^(?d+) (Jan|Feb| snip...>)$/ => $1$R1

のような$R?dを使った正規表現や再帰置換処理で、replace (/[pattern]/g, function(){})のfunctionがSafariではon the flyに処理されず、そのまま画面に出現します。

Creammonkeyでインストールしたスクリプト編集

Creammonkeyでインストールしたスクリプトは~/Libraries/Applications Support/Creammonkey/に保存されています。

Japanizeではサーバのスクリプトを読み込むので、core.jsをダウンロードしてelem.src = 'file:///Users/taiyo/Desktop/core.js';のようにローカルで編集することでwork aroundを試みることができます。

修正していただきました

開発者のkazuhookuさんに修正していただきました。

感謝。

2件のコメント

  1. 説明ありがとうございます。最新版の Safari や Opera でも発生したので調べたところ、Flickr が独自バージョンの String.prototype.replace を使っていました (汗
    なので、翻訳実行時に String.prototype.replace が使い物になるか判定して、動作を切り分けるようにしました。ありがとうございます。

  2. ありがとうございます。修正されたことを確認しました。
    なるほど、サイト独自のライブラリ、というものもあり得るのですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。