複数スクリプトの相性問題 & 0.6.4対応

Firefox 1.0.7 + Greasemonkey 0.5.3 の時の話ですが、同一ページで複数のgreasemonkeyスクリプトが動かないという問題に直面しました。
詳しく調べると、正規表現でマッチした結果のオブジェクトがグローバルなため、一方のスクリプトが処理した結果のRegExp.$1(など)を別のスクリプトRegExp.$1が上書きして、いやーんな結果になっていたという。
まぁ、片一方は使わないので問題ない。
……のだけど、使わない方=はてなグリースモンキーとして掲載されている物で、使う物=同時に使うと不具合の出るもの=自作物、なのが悩ましい。気にしないのが一番だけど。
どうせ他人はそれほど人の作った物に期待はしない。
[追記してみる]
具体的に問題となったのは
簡単写真挿入スクリプト(http://www.hatena.ne.jp/info/greasemonkey/HatenaDiaryMyFotoMenu.user.js)

    var saveIntervalID;
    if (location.href.match(/http:\/\/d\.hatena\.ne\.jp\/([^\/]+)\/edit/)) { // Diary
        var isPreview = document.evaluate(
                                   '/descendant::p[@class="message"]',
                                   document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue;
        if (isPreview)
            return;
        userName = RegExp.$1;
        // userName = "another_user_name";

のuserName取得している所の「RegExp.$1」が、自作の編集画面にカレンダー表示するスクリプト(http://homepage1.nifty.com/inami/hatenadiaryEditDateFromCalendar.user.js)

  // 日付をURLからセット
  function editDateFromURL() {
    var urldate;
    location.href.match(/.*edit\?date=(\d{8}$)/);
    if (RegExp.$1) { 
      urldate = RegExp.$1;
    } else {
      return;  //日付が8桁じゃないとか数字じゃないとか
    }
    urldate.match(/^(\d{4})(\d{2})(\d{2})$/);
    var y = RegExp.$1;
    var m = RegExp.$2;
    var d = RegExp.$3;

    urldate.match(/^(\d{4})(\d{2})(\d{2})$/);
    var y = RegExp.$1;

この1行目と2行目の間に割り込んでくる(?)、と言う物。
自作の方はこれでyを年の所につっこむので、簡単写真挿入が有効だと下の写真のようになってしまう(苦笑)


*
まぁ、そんなことは置いておき、Firefox 1.5 + Greasmonkey 0.6.4で動かなくなった自作物の修正が、目下の所の問題。
Greasemonkey 0.6.4で起こる問題として

  • XMLHttpRequestが使えない(GM_略を使うらしいが、元々使っていない)
  • 0.3.xや0.5.x系では通っていた日本語コメントが、syntax errorの原因になることがある
  • イベントハンドラが特定形式しか使えない
  document.captureEvents(Event.MOUSEMOVE);
  document.onmousemove = setpos;

とか書いていたけれど、Eventオブジェクトは無いし、onxxxxx →onXxxx になっているし、やっぱり動かんし…orz
いつまでたっても直らない…
addEventListener形式になおしたけど、テストするのは帰ってからになりそう。
[こちらも追記]
動くようになった。もうちょっと整形したら、もう一度書く。