2012-04-23 20 views
7

私はFacebookのニュースフィードをロードする機能をフックしようとしています:Facebook.com上これを行うにはJavaScript関数呼び出しにフックする必要がありますか?

UIIntentionalStream.instance && UIIntentionalStream.instance.loadOlderPosts(); 

を。

JavaScriptを使用してこれを行う方法はありますか?基本的には、ある種のコールバックが必要です。その関数が呼び出されると、自分の関数を呼びたいと思います。あなたが好きな場所だけで元の関数の呼び出しの前または後に、フック

var old = UIIntentionalStream.instance.loadOlderPosts; 
UIIntentionalStream.instance.loadOlderPosts = function() { 
    // hook before call 
    old(); 
    // hook after call 
}; 

答えて

7

はこのような何かを試してみてください。

18

より完全な方法は次のようになります。

var old = UIIntentionalStream.instance.loadOlderPosts; 
UIIntentionalStream.instance.loadOlderPosts = function() { 
    // hook before call 
    var ret = old.apply(this, arguments); 
    // hook after call 
    return ret; 
}; 

これはloadOlderPostsは、任意のパラメータを期待したり、これを使用している場合は、発信者が任意の戻り値を期待していた場合、それはだけでなく、それらの正しいバージョンを取得することを確認しますそれはそれを得るでしょう

3

私はあなたがこの "フック"アクションを実行するために呼び出すことができる関数を作成しました。

hookFunction(UIIntentionalStream.instance, 'loadOlderPosts', function(){ 
    /* This anonymous function gets called after UIIntentionalStream.instance.loadOlderPosts() has finished */ 
    doMyCustomStuff(); 
}); 



// Define this function so you can reuse it later and keep your overrides "cleaner" 
function hookFunction(object, functionName, callback) { 
    (function(originalFunction) { 
     object[functionName] = function() { 
      var returnValue = originalFunction.apply(this, arguments); 

      callback.apply(this, [returnValue, originalFunction, arguments]); 

      return returnValue; 
     }; 
    }(object[functionName])); 
} 

ボーナス:適切な対策として、これをすべて閉じてもよいです。

関連する問題