Drupal で使用されている Superfish ライブラリは次のとおりです。102 行目の superfish.js ファイルには、次のコードが含まれています。
$.fn.extend({
hideSuperfishUl : function(){
/* some statements */
},
showSuperfishUl : function(){
/* some statements */
}
});
これら 2 つの関数をオーバーライドする必要があります。どうやってするの?(具体的に Drupal で行う方法ではなく、javascript で行う方法を意味します)
PSいくつかの情報に基づいて、私は自分のスクリプトにこのコードを追加しようとしました:
(function ($) {
var orig_hideSuperfishUl = $.hideSuperfishUl;
$.hideSuperfishUl = function(){
alert('lol');
}
})(jQuery);
Firebug は、ページが更新されると「var」で始まるステートメントが実行されることを示していますが、「alert」を含むステートメントは実行されません。代わりに、元の hideSuperfishUl 関数が実行されます。
[編集 1] カスタム コードを次のように変更しました。
(function ($) {
//var orig_hideSuperfishUl = $.hideSuperfishUl;
var hideSuperfishUl = function(){
alert('lol');
}
})(jQuery);
[編集 2] 4 つのブレークポイントを追加しました。
- コードを含む102行目のsuperfish.js
$.fn.extend({
- コードを含む106行目のsuperfish.js
o.retainPath = false;
- 私のスクリプトの行で
var hideSuperfishUl = function(){
- 私のスクリプトの行で
alert('lol');
ページを更新した後、ブレークポイント 1 のコードが最初に実行され、次にブレークポイント 3 で実行されます。マウスをメニューのオンとオフに移動した後、ブレークポイント 2 のコードが実行されます。ブレークポイント 4 に達していません。
ブレークポイント 1 のコール スタックは 2 つの無名関数のみです (最初の関数は jQuery 引数を持つ最も外側の関数で、2 番目はブレークポイントです)。ブレークポイント 3 での非常によく似たコール スタック。