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

utilizzando il codice sopra non sembra funzionare.come sovrascrivere appendChild()?

Qualcuno sa?

+0

+1 Grande domanda; Ho imparato qualcosa di nuovo. – Plynx

+0

perché sto scrivendo una tesi di master sul bookmarklet, ora ho bisogno di descrivere i suoi punti deboli e come i rouge possono sfruttarlo. – RedHotScalability

risposta

13

Quello che si potrebbe voler sostituire è Element.prototype.appendChild ma probabilmente è una cattiva idea.

questo esempio viene aggiunto il testo intercepted nell'elemento inserito:

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

grazie, accetterò la tua risposta tra 8 minuti. – RedHotScalability

2

È mal consigliato per sovrascrivere funzioni native, ma se lo si fa di assicurarsi che ritorni l'elemento aggiunto come bene per evitare problemi con il codice che utilizza il valore restituito della funzione nativa "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); 
};