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

sử dụng mã ở trên dường như không hoạt động.Tôi làm cách nào để ghi đè appendChild()?

Có ai biết không?

+0

+1 Câu hỏi hay; Tôi đã học được điều gì đó mới mẻ. – Plynx

+0

bởi vì tôi đang viết về luận văn thạc sĩ về bookmarklet, bây giờ tôi cần mô tả những điểm yếu của nó và làm thế nào các rouges có thể khai thác nó. – RedHotScalability

Trả lời

13

Những gì bạn có thể muốn thay thế là Element.prototype.appendChild nhưng đó có thể là một ý tưởng tồi.

Ví dụ này cho biết thêm các văn bản intercepted trong các yếu tố chèn vào:

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

cảm ơn, tôi sẽ chấp nhận câu trả lời của bạn sau 8 phút. – RedHotScalability

2

Người ta bị bệnh nên ghi đè lên các chức năng tự nhiên, nhưng nếu bạn làm điều đó hơn chắc chắn rằng bạn quay trở lại các yếu tố nối như cũng để ngăn các sự cố với mã sử dụng giá trị trả lại của hàm "appendChild" gốc:

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); 
}; 
Các vấn đề liên quan