DebugKit+IEでのエラー緩和

CakePHPでの開発に非常に便利なDebugKit。
しかし、IE*1でのみ、謎のエラーが発生する場合があります。


CakePHP1.2の頃は、そもそもIEでは動作しなかったのですが、
その対応用のパッチを当てると、1.3用で発生しているエラーも多少緩和されるようです。


(追記:ID不正?エラーは直りきってませんでした。まだ出ます・・・)


発生している主な現象
  1. http://domain/controllers/view/[ID] へのリンクを押すと、「ID不正」のエラーメッセージが出る場合がある*2
  2. 全ページで「1ライン1文字目」の構文エラーが発生*3

いずれも、CakePHPのdebug設定を0にするなど、DebugKit自体を無効にすれば発生しません。


検索すると、以下のパッチがありました。
BLOG - siwa32.com
CakePHP1.3対応用のDebugKitでも、当該箇所には変更がないようなので、同様に修正してみました。


これでとりあえず、「ID不正のエラーメッセージが出る」ことがなくなったようです。

@@ -496,7 +496,7 @@ DEBUGKIT.toolbar = function () {
         Use event delegation to find original target.
        */
        function _delegateNeatArray (event) {
-               var clickedEl = event.target;
+               var clickedEl = event.target || event.srcElement;
                while (!Element.nodeName(clickedEl, 'LI')) {
                        clickedEl = clickedEl.parentNode;
                }
@@ -580,8 +580,13 @@ DEBUGKIT.toolbar = function () {

                        var self = this;
                        Event.addEvent(panel.button, 'click', function (event) {
-                               event.preventDefault();
-                               return self.togglePanel(panel.id);
+                               if (event.preventDefault) {
+                                       event.preventDefault();
+                               } else {
+                                       // IE
+                                       event.returnValue = false;
+                               }
+                       return self.togglePanel(panel.id);
                        });
                        this.panels[panel.id] = panel;
                        return panel.id;
@@ -736,7 +741,12 @@ DEBUGKIT.toolbarToggle = function () {
                                self = this;

                        Event.addEvent(button, 'click', function (event) {
-                               event.preventDefault();
+                               if (event.preventDefault) {
+                                       event.preventDefault();
+                               } else {
+                                       // IE
+                                       event.returnValue = false;
+                               }
                                self.toggleToolbar();
                        });


私もそうですが・・・
自分がIE使わないから、IEエラーをまるっと見逃したモノを作ってしまうこと、ままありますね・・・・

*1:確認バージョンはIE8

*2:出ない場合もある

*3:ページ表示には目だった阻害なし