さんまがおいしい季節だねー(´・ω・`)

GreaseMonkey ではスクリプト間で名前空間の衝突は発生しません

JavaScript — タグ: , — さくら @ 2009/09/21 23:28

わりと最近 GreaseMonkey スクリプトを作れるようになったのですが、とりあえず JavaScript なので名前空間の衝突とか発生しそうなので、無名関数を直接呼び出す方法で書いてたのです。

// ==/UserScript==

(function() {
    // コード...
})();

こんな感じで。

ま、実を言うとちゃんと調べるのが面倒だったので、「greasemonkey 名前空間」あたりでググって出てきたページに衝突するって書いてたので適当に従ってました。

ところが先ほどアップした プログラミングできなくてもレンタルサーバ借りなくても作れる Twitter bot もどきグリモンの作り方 で公開しているユーザースクリプト(GreaseMonkey のスクリプトのこと)を作ってる最中に、@require で外部の JavaScript を読み込もうとした際に問題が発生しました。@require と無名関数を併用すると、@require で読み込もうとしたスクリプトにエラーが発生するのです。もちろんそのスクリプトには(少なくとも動かないといった単純な)バグはありません。(最終的に外部の JavaScript の読み込みはやめたので、公開した版に関係するコードは残ってません。)

で、あーだこーだした挙句、全体を無名関数で囲むのを止めたら全部うまく動いたという感じで。ただ名前空間の衝突回避のために無名関数を使ってたのに、それを外してしまうと別の問題が発生してしまう訳で、しぶしぶ「これってマジ超面倒くさくない?」とか思いながら調べることにしました。

で結論としては、現在 GreaseMonkey のユーザースクリプトは、Firefox 1.5 から実装されている Components.utils.evalInSandbox を使った sandbox 内で実行されるようになってますので、名前空間の衝突は起こりません。

一応名前空間を衝突させるテストもしてみたのですが、特に何も問題は発生しませんでした。

なので

              _
          /^l  / ;i
          / ;::,ー’ ‐〈 __   こまけぇこたぁいいんだワン!!
   /     i f  r=, “ ̄r;;)____  
  /      /   _,.-‐‐’;/ ⌒  ⌒\
    /   ,,i    二ニ⊃( ●)  (●)\
   /    ノ;;ヽ   ,,_ノ ::::::⌒(__人__)⌒::::: \
      ,イ;;;; ;:::   ,,}      |r┬-|       |
     /;;;;;::::::  , , ,,j \     `ー’´     /

ということのようですw

0 Comments »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity