2016年2月27日土曜日

UserScriptLoader.uc.jsをFirefox 46で使えるようにする

Firefoxの拡張機能userChromeJSのスクリプトの一つUserScriptLoader.uc.jsがFirefox Developer Edition 46で使えなくなっていたので、その修正を行った。
https://gist.github.com/KyoPeeee/2a777b5bde599baf8779


なぜ使えなくなったかというと、次の2つの構文が廃止されたのが原因。

式クロージャ

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Expression_closures

function(s) "delay" in s ? safeWindow.setTimeout(run, s.delay, s) : run(s)
のようになっている構文である。
これを
s => "delay" in s ? safeWindow.setTimeout(run, s.delay, s) : run(s)
とアロー関数に置き換えた。


古い形式のArray comprehensions

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Array_comprehensions
[x for(x in USL.database.pref[script.prefName + name])];
という書き方が使えなくなった。
[for (x of USL.readScripts) if (x.disabled) x.leafName];
という新しい書き方か
data.map(x => x);
とmap関数に置き換えた

リリース版のFirefox 46でも使えなくなる可能性が高いと思うので、ここにメモしておく。