3
Сценарий, который я загружаю, является неправильным. У него есть структура вроде этого:Обезьяна-исправление названной функции, которая называется сразу
function bad_function() {
...
}
/* randomly generated stuff */
bad_function();
Как изменить поведение bad_function
, если он немедленно вызвал в конце сценария? Я думал о создании беззвучно свойство только для чтения на window
перед загрузкой сценария, но это бросает TypeError: Identifier 'bad_function' has already been declared
исключение, когда вышеописанный скрипт выполняется:
Object.defineProperty(window, 'bad_function', {
value: function() {
/* my monkey-patched code */
}
});
Как я обезьяна патч эта функция?
Вы используете Chrome? Вы сталкиваетесь с конкретной проблемой браузера? –
@jjk_charles: Нет, это браузер-агностик и проблема со сценарием. – Blender
Используете ли вы «defineProperty» в том же JS-файле, что и исходный bad_function(), или они находятся в разных файлах? Если разные файлы, в каком порядке размещен тег
Это нехорошо, но все, что я могу сделать, это загрузить скрипт через ajax вместо того, чтобы поместить его в тег
<script>
, манипулировать строкой результата, чтобы вызвать вашу собственную версию функции (или «переименовать»bad_function
это не отменяет версию), затем положить что в<script>
тег и добавить его на страницу:пример использования JQuery для простоты:
Working JSFiddle
источник
2015-01-06 11:56:35 Rhumborl
Переименование 'bad_function' победит всю точку патчей обезьян. – Nit