AJAX Возвращая JavaScript для анализа результатов в потере содержимого страницы

StackOverflow https://stackoverflow.com/questions/3809450

Вопрос

Поэтому я недавно работал в скрипте, чтобы запустить код на стороне клиента для защиты интеллектуальной собственности без вмешательства с появлением интерактивности полученной страницы. Процесс выглядит следующим образом:

  1. HTTP-запрос приходит, .htaccess перенаправляет (. *), Чтобы parse_request.php
  2. parse_request.php создает класс phpurlparser ", переменные классов которого по существу являются копиями переменных $ _Server
  3. phpurlparser смотрит на запрошенный путь, а иногда и хост, респортек или другую информацию на сервере, чтобы определить, как реагировать. Есть несколько возможных ответов

. Запрашиваемый объект был файл .js или .css. Передайте файл на компрессор YUI и отправьте вывод

б. Запрашиваемый объект - это изображение или приложение. Пройти файл без изменений

с. Запрашиваемый объект содержит 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 для возврата Hex в оригинальную форму. У меня есть пример этой настройки на примерах.chikachu.com/Colorbox/example1 (я не кодировал Colorbox, это бесплатный инструмент jQuery, который я решил использовать, поскольку это позволило мне проверить несколько различных функций JavaScript и убедиться, что все они все работал)

Теперь для проблемы:

Как оказывается, это работает 99% времени. Но ajax заставляет его злиться. Нажав на один из примеров AJAX (под «другими типами контента») будет выглядеть так, будто он перенаправляет вас на новую страницу. В поисках адресной строки или просмотра источника страницы докажет, что вы все еще на одной странице, однако. Использование инструмента «Проверка элемента» в Chrome (или Firebug в Firefox) покажет, что содержимое веб-страницы было полностью заменено содержимым запроса AJAX.

Если я изменяю parse_request.php слегка, чтобы файл, запрошенный ajax, который будет передан через невредимый, все работает. Без проблем. Поэтому по какой-то причине мой скрипт, который заменяет строку гекса со своим значимым HTML-аналогом, перезаписывает весь сайт вместо того, чтобы красиво вставлял себя в пределахu003Cdiv> объект.

По сути, вот ожидаемый непустированный 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>

Я ожидаю, что line document.write () здесь напишет y в расположении JavaScript (в пределахu003Cdiv> ). Если я ошибаюсь, и это не так, как Document.write () работает, я все еще ожидаю, что он напишу у в конце документа. Вместо этого весь документ заменяется Y. Почему это, а что мое решение?

Это было полезно?

Решение

Попробуйте что-то вроде этого:

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox">
        <div id="MYAJAXCONTENT">
        </div>
        <INSERT AJAX HERE> 
    </div> 
    ... 
</body> 
</html> 

<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.getElementById('MYAJAXCONTENT').innerHTML = y; 
        // for the jQuery psychos out there
        // $('#MYAJAXCONTENT').html(y);
        </script> 
    </div> 
    ... 
</body> 
</html> 

Другие советы

Ответ на свой последний вопрос: звонок

Document.write ('my_precious_html_code');

будет добавлять или переопределять текст на странице в зависимости от того, когда его называли (до или после события onload). Вы не должны использовать его Любые скрипт Об этом подробнее здесь: http://javascript.crockford.com/script.html.

Общий ответ: комфортный HTML-код не имеет никакого смысла. Просто как защита изображений, отключая правую кнопку мыши в конце 2000 года. Мне потребовалось менее 3 сек, чтобы «взломать» ваш запутанный код и получите красиво отформатированный HTML. Также ваш сайт оказывается в Режим причуда Что, вероятно, что-то, что вы не хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top