DebugKit+IEでのエラー緩和
CakePHPでの開発に非常に便利なDebugKit。
しかし、IE*1でのみ、謎のエラーが発生する場合があります。
CakePHP1.2の頃は、そもそもIEでは動作しなかったのですが、
その対応用のパッチを当てると、1.3用で発生しているエラーも多少緩和されるようです。
(追記:ID不正?エラーは直りきってませんでした。まだ出ます・・・)
発生している主な現象
- http://domain/controllers/view/[ID] へのリンクを押すと、「ID不正」のエラーメッセージが出る場合がある*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エラーをまるっと見逃したモノを作ってしまうこと、ままありますね・・・・