種別[statuses] cocolog:74918848
セクションJRF のひとこと
日時2012年12月07日
元URLhttp://jrf.cocolog-nifty.com/statuses/2012/12/firef.html

Firefox 17 で Greasemonkey…

Firefox 17 で Greasemonkey のユーザースクリプトが動かなくなった。@grant 文を疑ったが、原因はそこではなく、E4X が廃止されたことにあった。
JRF 2012年12月7日

E4X の除去は、

<pre>
val m1 = <member>
  <name>{name}</name>
  <id>{id}</id>
  </member>;
</pre>

とかいうときは、

<pre>
val m1 = '<member>'
  + '<name>' + escapeHTML(name) + '</name>'
  + '<id>' + escapeHTML(id) + '</id>
  + '</member>';
</pre>

とかする必要がある。

JRF 2012年12月7日

いちいちクォートするのではなく \ とかで改行を活かすのを好む方もいるかもしれないが、escapeHTML みたいなのがいるのが大事なところ。

JRF 2012年12月7日

escapeHTML、escapeXML に相当するものは、すでにだいたい使っていると思うが、↓みたいな関数。

<pre>
function escapeHTML(s) {
  return s.toString().replace(/\&/g, "&amp;")
    .replace(/\"/g, "&quot;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;");
}
</pre>

なお、escapeHTML 内の s.toString() がない実装だと、ちょっとエラーが出るので注意。

JRF 2012年12月7日

……。

《Firefox 17でE4Xが無効に | Yuji Noizumi's blog》
http://yuji.noizumi.org/blog/2012/11/23/firefox-17%E3%81%A7e4x%E3%81%8C%E7%84%A1%E5%8A%B9%E3%81%AB/

《E4X | MDN》
https://developer.mozilla.org/ja/docs/E4X

今だと about:config で有効にできるが、Firefox 18 では完全除去されるらしい。

JRF 2012年12月7日

……。

しかし、こんな文法が変わるような変更が許されるのか?E4X はそれほど Flexible でもないんで、E4X で書いたのを後からさらにいじるとか、私もやってたけど、そういうのって単純な書き換えだけで済まないこともあると思うんだけど…。

JRF 2012年12月7日

レガシーコードがダメになって、それをチマチマ書き直さないといけないとか、どんだけ人月かけさせるの?使ってる人に前もって警告画面でも表示していれば、ある程度時間使って準備もできるけど、例えば私なんか、これで、書こうと思った「ひとこと」を書けなくなったわけで、そういうリアルタイムな要求で損害が出てても知らんぷりで通ずるのか?

デフォルトから外すとしても、about:config じゃなくて、スクリプトのプラグマとかで E4X を有効にできる方法とか残すのが、普通のやり方じゃないか?

JRF 2012年12月7日

今は、JavaScript がメジャー言語となって、他の言語を JavaScript へのコンパイラとして実装するみたいな話もよく聞く。だったら、例えば、特定のアドオンでコンパイラを用意し、プラグマによってはそこでコンパイルされた JavaScript を実行するとかいう機構を実装する道もあるだろう。そういうのがあれば、E4X が使える JavaScript を E4X が使えない JavaScript に変換するという「コンパイラ」を指定すれば、「対応終り」とできる方法もありえたはず。

JRF 2012年12月7日

これを知って私はちょっと正直かなり怒っちゃって、他の人から電話応対に粗相を来たしちゃったぐらいで、今冷静になろうとしてるところなんだけど、やっぱり「技術者の劣化」([aboutme:120990]とか)はここまで来たか…ぐらいのことは言ってしまわないと気がおさまらない!

(まぁ、本当の昔かたぎのオープンソースな技術者なら文句があるなら自分でなんとかしろってところなんだろうね。結局のところ私がダメなんであって、他人のせいにしちゃいけないな。orz)

JRF 2012年12月7日

typo 「'</id>」→「'</id>'」。

JRF 2012年12月7日

後方参照 (2 件)