2013-01-10 11 views
7
appendChild = function(message) { 
    console.log("intercepted!"); 
} 

上記のコードを使用しても動作しないようです。appendChild()をオーバーライドするにはどうすればよいですか?

誰でも知っていますか?

+0

+1大きな質問です。私は新しいことを学びました。 – Plynx

+0

私はブックマークレットについてのマスター論文について書いているので、今私は弱点とルーグがそれを悪用できる方法について説明する必要があります。 – RedHotScalability

答えて

13

置き換えたいものはElement.prototype.appendChildですが、それはおそらく悪い考えです。

この例では、挿入された要素のテキストinterceptedを追加します。

var f = Element.prototype.appendChild; 
Element.prototype.appendChild = function(){f.apply(this, arguments);arguments[0].innerHTML="!Intercepted!"; }; 
document.body.appendChild(document.createElement("div")); 

Demonstration

+0

ありがとう、私は8分であなたの答えを受け入れるでしょう。 – RedHotScalability

2

病気のネイティブ関数を上書きすることをお勧めしていますが、よりそれを行う場合は、として追加の要素を返すことを確認してくださいよく「appendChild」ネイティブ関数の戻り値を使用するコードの問題を防ぐために、次のようにします。

window.callbackFunc = function(elem, args) { 
    // write some logic here 
} 
window.f = Element.prototype.appendChild; 
Element.prototype.appendChild = function() { 
    window.callbackFunc.call(this, arguments); 
    return window.f.apply(this, arguments); 
}; 
関連する問題