Так что я недавно работал над скриптом, чтобы обмануть клиентский код для защиты интеллектуальной собственности, не мешая появлению интерактивности полученной страницы. Процесс выглядит следующим образом:AJAX, возвращающий javascript для анализа, приводит к потере содержимого страницы
- запрос HTTP приходит, .htaccess перенаправляет к parse_request.php
- parse_request.php создает класс "phpURLParser" класс которого переменные являются по существу копиями $ _SERVER (*). переменные
- phpURLParser просматривает запрошенный путь, а иногда и хост, референт или другую серверную информацию, чтобы определить, как реагировать. Существует несколько возможных ответов
a. Запрошенным объектом был файл .js или .css. Передайте файл на компрессор YUI и отправьте выходные данные
b. Запрошенным объектом является изображение или приложение. Передайте файл без изменений
c. Запрошенный объект содержит HTML. Заменить каждый символ ASCII с 2-значным шестнадцатеричным эквивалентом и отправить следующий JavaScript:
<script type="text/javascript">
var x="~lots of hex~";
var y="";
for(i=0; i<x.length; i+=2){
y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>
Так сайт заменяются большим количеством гекса и небольшая JavaScript, чтобы вернуть гекс к своей первоначальной форме. У меня есть пример этой установки на examples.chikachu.com/colorbox/example1 (я не кодировал ColorBox, это бесплатный инструмент jQuery, который я выбрал для использования, так как это позволило мне протестировать несколько различных функций javascript и убедиться, что они все работал)
Теперь проблема:
Как оказалось, это работает 99% времени. Но AJAX сердится. Щелчок одного из примеров AJAX (в разделе «Другие типы содержимого») будет выглядеть так, как будто он перенаправляет вас на новую страницу. Однако просмотр в адресной строке или просмотр источника страницы докажет, что вы все еще на одной странице. Использование инструмента Inspect Element в Chrome (или Firebug в Firefox) покажет, что содержимое веб-страницы было полностью заменено содержимым запроса AJAX.
Если я немного изменю parse_request.php, чтобы файл, запрошенный AJAX, прошел через невредимый, все работает. Нет проблем. Поэтому по какой-то причине мой скрипт, который заменяет строку hex своим значимым HTML-копиром, перезаписывает весь сайт, а не красиво вставляет себя в пределы объекта <div>.
По существу здесь ожидаемое без запутанного HTML:
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<INSERT AJAX HERE>
</div>
...
</body>
</html>
С только AJAX затемненной, я ожидаю следующее:
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<script type="text/javascript">
var x="asdfasdfasdfasdf";
var y="";
for(i=0; i<x.length; i+=2){
y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>
</div>
...
</body>
</html>
Я ожидаю, что document.write() линии здесь будет напишите y в местоположении javascript (в пределах <div>). Если я ошибаюсь, и это не так, как работает document.write(), я все еще ожидаю, что он напишет y в конце документа. Вместо этого весь документ заменяется на y. Почему это, и каково мое решение?
Ошибка установления соединения с базой данных – vol7ron
Я думаю, что 'document.write()' пишет в момент времени, это событие-событийная и его вывод является нерегулярным в зависимости от загрузки страницы. Это может сломать всю вашу страницу, вы должны рассмотреть возможность использования 'innerHTML' или' textNode' для вставки текста adhoc. Однако, если вы хотите выполнить, я думаю, вам понадобится document.write, поскольку innerHTML не позволит это произойти, по крайней мере для внешних скриптов. – vol7ron
Вы также должны пересканировать переменную счетчика и кэшировать длину строки 'for (i = 0; i
vol7ron