Сообщение от reinterpret_alexey
|
tsigel,
Thx, но тут есть проблема. Я почитал мануал mozilla по прокси-объектам (https://developer.mozilla.org/ru/doc..._Objects/Proxy) и выяснилось, что вроде бы нельзя никак именно подменить window, можно только создать новый объект - например, window2. А я не могу "заставить" скрипт использовать мой объект вместо window. Скрипт обфусцирован и велик. Мне потому и надо залогировать все вызовы и чтения свойств, что их не видно из-за обфускации (снять - не вариант). Скрипт может где-то в середине обращаться к window, складывая название объекта window по буковкам в разных callback-ах setInterval/setTimeout, и такая жесть есть. Вот в чем дело.
|
Можете, и очень просто, для этого достаточно обернуть этот скрипт в свой. Это делается примерно так:
var myWindow = new Proxy({}, {
get: function(target, name){
alert('get window element with name: ' + name);
return name in target?
target[name] : window[name];
},
set: function (target, name, value) {
alert('set window element with name: ' + name);
target[name] = value;
return target;
}
});
var myDocument = ...;
(function (window, document) {
// Здесь много вражеского кода, который надо залогировать.
}).call(myWindow, myWindow, myDocument);
Если вы обернете код который хотите прологировать в свою функцию и переопределите там window, то тот код уже никак не доберется до оригинального window (кроме разве что с помощью конструкций типа eval(...) или new Function(...) и таймаут/интервал с о строковым параметром, но их вы можете найти поиском).