Мне нужно перехватить вызовы на некоторые функции API DOM и сохранить их аргументы в качестве побочного эффекта. Например, предположим, что меня интересуют функции getElementsByTagName
и getElementById
. Смотрите пример ниже:Перехват вызовов в функции DOM API
"use strict";
const jsdom = require("jsdom");
let document = jsdom.jsdom("<html><head></head><body><div id='foo'><div></div></div></body></html>");
let cpool = {ids: [], tags: []};
let obj = document.getElementById("foo");
// --> cpool = {ids: ["foo"], tags: []}
obj.getElementsByTagName("div");
// --> cpool = {ids: ["foo"], tags: ["div"]}
Один важное замечание в том, что я использую node.js и document
объект реализуется jsdom библиотеки. До сих пор я пытался использовать ES6 Proxies для изменения поведения вышеупомянутых функций DOM.
Вот как я пытался проксировать объект документ объект, чтобы уловить все вызовы методов. Интересно, как и как с помощью этой техники или какой-то другой я могу найти решение моей проблемы.
let documentProxy = new Proxy(document, {
get(target, propKey, receiver) {
return function (...args) {
Reflect.apply(target, propKey, args);
console.log(propKey + JSON.stringify(args));
return result;
};
}
});
documentProxy.getElementById("foo");
// --> getElementById["foo"]
Я не знаю, почему, но это звучит, как вы делаете плохо ... – evolutionxbox
@evolutionxbox что вы имеете в виду 'плохой thing'? –
Какова ваша [фактическая проблема] (http://meta.stackexchange.com/q/66377), которую вы пытаетесь решить, перехватив эти вызовы? – Bergi