たった二つです。

  1. 名前空間を一つだけ用意して、それのみを使うこと
  2. 設定はグローバル変数ではなく、引数渡しにすること

そうでないと、導入したサイトで変数衝突が起こる公算が大きくなります。

それが実際に発生したのが、右の画像です。表示がぐしゃぐしゃになっています。


問題を起こしたのは、以下のsnippetでした。

<script type="text/javascript" src="http://blogchart.jp/js/blogparts.js"></script>
<script type="text/javascript"><!--
id="22";blogurl="http://blog.livedoor.jp/dankogai/";partstype="b";viewBlogparts();
// --></script>

javascriptをロードして関数を一個実行するという、典型的なウィジェットのsnippetですが、idblogurltypeといういかにも衝突しそうなグローバル変数が三つも使われています。

これを例えば

jp.blogparts.show({id:22,blogurl:"http://blog.livedoor.jp/dankogai/",partstyle:"b"});

という風にすれば、このようなことはまず起こりません。

比較的最近のものは同様の配慮がなされているのですが、古いものはほいほいグローバル変数を使っていて、ときおりこうして問題が顕在化します。

それで名前空間をどうするかですが、これは java と同じく、ドメイン名をひっくり返すのが一番よいのではないかと思います。衝突回避という意味ではこれが一番確実で簡単なのではないかと。 javascript の世界ではほとんど普及していない習慣ではあるのですが…

各位ともよろしくお願いします。

Dan the Man with Too Many Widgets to Paste