サイトマップ

DokuWikiプラグイン開発tips:window.getSelection()を使う

DokuWikiは良くできたソフトウェアだと思いますが、JavaScriptの実装に関してはあまり行儀が良くないところがあります。window(つまりグローバル)の名前空間を汚しすぎています。その影響の1つにFireFoxのwindow.getSelection()を上書きしてしまうことがあります。この関数は、コンテンツの選択領域を取得・設定するためのもので、割と重要で使い道の多いものなのに、DokuWikiでは使えなくなってしまっています。

かといってDokuWiki本体に手を入れると、バージョンアップのときにエラい目に遭うので、そういう方法はなるべく取りたくありません。今のところの解決策は、テンプレートのmain.phpで

  <script language="JavaScript">
  <!--
  var _window = {};
  for (var key in window) {
      var val = window[key];
      if (typeof val == 'function') {
        _window[key] = (function(fn){
            return function(){ return fn.apply(window, arguments) };
        })(val);
      }
  }
  //-->
  </script>

と書いて、他のスクリプトが読みこまれる前にwindowのオリジナルの関数を_windowに退避させておいて、これを使うという方法です。TPL_METAHEADER_OUTPUTイベントを使うのが綺麗なんでしょうが、とりあえずの逃げ道ということで。

関連コンテンツ

 
research/1311409888.txt · 最終更新: 2011/07/23 17:49 by Kazuyuki Matsuda
特に明示されていない限り、本サイトの内容は次のライセンスに従います:Copyright(C) 2011 Shorindo, Inc. All Rights Reserved
Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki