@Cecchiの答えはクールですが、すべての HTMLElement インスタンスにグローバルに適用される真のモンキーパッチではありません。その答え以来、ブラウザーには新しい機能があります。
これはHTMLElement.prototype.innerHTML
セッターであるため注意が必要ですが、次のように機能させることができました。
//create a separate JS context that's clean
var iframe = document.createElement('iframe');
//have to append it to get access to HTMLElement
document.body.appendChild(iframe);
//grab the setter. note that __lookupSetter__ is deprecated maybe try getOwnPropertyDescriptor? anyways this works currently
let origSetter = iframe.contentWindow.HTMLElement.prototype.__lookupSetter__('innerHTML');
//mangle the global HTMLElement in this JS context
Object.defineProperty(HTMLElement.prototype, 'innerHTML', {
set: function (val) {
console.log('innerHTML called', val);
// *** do whatever you want here ***
return origSetter.call(this, val); //allow the method to be called like normal
}
});
今それをテストする:
document.createElement('div').innerHTML = '<p>oh, hey</p>';
//logs: innerHTML called <p>oh, hey</p>
ここにJSBin http://jsbin.com/qikoce/1/edit?js,consoleがあります