На этом конкретном сайте есть обезьяна appendChild
, как вы можете видеть, если вы запускаете
document.body.appendChild.toString()
в консоль: она дает вам
function(n){return t(n,"AC")?u.apply(this,arguments):null}
взамен [native code]
, что означает, что нативная функция была перезаписана.
Обратите внимание, что исправленный объект-прототип Element.prototype
, но appendChild
изначально существует в Node.prototype
, который остается не исправленным:
Node.prototype.appendChild.toString()
// gives function appendChild() { [native code] }
Вместо этого вы можете .call
непропатченный appendChild
:
(function(doc) {
if (typeof jQuery == 'undefined') {
var script_jQuery = document.createElement('script');
script_jQuery.setAttribute('src', 'https://code.jquery.com/jquery-latest.min.js');
Node.prototype.appendChild.call(
document.body,
script_jQuery
);
console.log('jQuery included ^_^');
} else {
console.log('jQuery already included ...');
}
})(document)
, и тогда он будет успешно добавлен. (typeof jQuery
затем оценивается как function
, а не undefined
, и вы видите, что на вкладке сети запрашивается правильный URL)
Если сайт исправил его правильно и сделалвсе ссылки на Node.prototype.appendChild
недоступны, единственным решением было бы запустить собственный Javascript до запуска Javascript страницы, что можно сделать с помощью менеджера пользовательских сценариев, таких как Tampermonkey , @run-at document-start
и использование мгновенного внедрения сценария для сохранения ссылки на Node.prototype.appendChild
до ее перезаписи.