Paste как в WYSIWYG

Статус
В этой теме нельзя размещать новые ответы.

sw04

seoplayer
Регистрация
1 Дек 2007
Сообщения
591
Реакции
215
Есть html страница, которая формируется вызовом js скрипта.
Мне нужен код, который формируется в результате.
Временное решение нашел как копировать то, что получилось, вставлять в висивиг и оттуда уже забирать код.
Но как упростить задачу?
Неужели придется только через висивиг :confused:
 
Т.е. как понял, нужно каким-то обрпазом посмотреть код, какой имеет страница ПОСЛЕ работы JS скрипта?
Если так, то можно использовать плагин к firefox, называется firebug, а какое отношение тема к php имеет - не понятно...
 
Так. Здесь тебе поможет js.
Ну давай подумаем:
Итак - мы можем обратиться к стандарту "де-факто", который поддерживают все известные браузеры, для получения кода страницы - после ее генерации с помощью js (свойству innerHTML:(
HTML:
<script type="text/javascript">
//<!--
 alert(window.document.documentElement.innerHTML); //здесь содержится почти весь код страницы
 var code = window.document.documentElement.innerHTML;
// code теперь содержит все содержимое страницы
//-->
</script>
Это "почти все". Не будет хватать только вот таких вот дескрипторов:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

, которые не входят в корневой узел <html>, ну и придется ковырнуть на наличие свойств еще и сам тег <html>, чтобы не потерять их, т.е. не было ли там чего нибудь такого:
<html xmlns="http://www.w3.org/1999/xhtml">
Но это уже мелочи.
 
  • Нравится
Реакции: sw04
Drimean, вытаскивать приходится сотни рисунков =)
Black#FFFFFF, подскажи, пожалуйста как передать эти данные php?
пробовал через куки, но видимо не так делаю =)
В js мои познания минимальны.
 
Ну давай подумаем. а) гет запрос не выход б) возможно нам поможет ajax, для примера давай возьмем Для просмотра ссылки Войди или Зарегистрируйся или любую другую, которая тебе нравится. Итак, немного доработаем скрипт:
Клиентская часть (читай комментарии) - frontend.php:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
</head>

<body>
<!-- Здесь идет твой яваскрипт код, генерирующий страницу, строго после него! вне его родительского
элемента пишем нужный нам код для отправки готовой страницы к файлу пхп -->
<!--Подключаем саму библиотеку ее файл  JsHttpRequest.js указываем путь к ней на сервере-->
<script type="text/javascript" src="../../lib/JsHttpRequest/JsHttpRequest.js"></script>
<script type="text/javascript">
//<!--
/*
 addEvent - Эта функция нужна нам, чтобы вызвать код, который получит
 содержимое страницы и отправит его на сервер тогда и только тогда,
 когда будет загружена и сгенерирована вся страница, а не на этапе
 ее генерации  (that's fucking explorer:))
 Принимает:
            @_obj - объект привязки события - объект: пример window
            @_ev  - название события, текст, например: "load"
            @_funct - имя функции, сопоставляемой событию: например myfunct
 Возвращает: void(0)
*/
function addEvent(_obj, _ev, _funct){

            try{
               _obj.addEventListener(_ev,_funct,false);
            } catch(ex){
                _ev = 'on'+_ev;
                _obj.attachEvent(_ev,_funct);
            }

        }
/*
 toServer - Эта функция нужна нам, чтобы получить нужные данные и сформировать
 запрос на сервер
 Принимает:  void(0)
 Возвращает: void(0)
*/

function toServer(){
    window.pCode = window.document.documentElement.innerHTML;
    // window.pCode теперь содержит все содержимое страницы, переменная глобальная
    //если ее придется использовать и далее, вне функции
    //на самом деле можно сделать пре фильтрацию данныых до отправки, на будущее тебе по изучению яваскрипта:)
    JsHttpRequest.query(
            'backend.php', // backend php script name
            {
                'pCode': window.pCode
            },
            // Function is called when an answer arrives.
            function(result, errors) {
                // Write errors to the debug div.
                document.getElementById("debug").innerHTML = errors;
                // Write the answer.
                if (result&&result.str.length) {
                    alert(result.str); //убираем этот код и пишем нужный для обработки результатов, присланных с сервера
                }
            },
            false  // do not disable caching
        );
    }

addEvent(window,'load',toServer); //вызываем функцию в момент полного формирования страницы

//-->
</script>
<div id="debug">
<!-- А здесь выведем ошибки при передаче данных на сервер-->
</div>
</body>

</html>
Серверная часть (backend.php:(
PHP:
<?php 
/* подключаем файл библиотеки (указываем местоположение на сервере) 
и инициализируем ее в виде объекта
*/
$charset				= "windows-1251"; //указываем кодировку (если отлична от utf-8)
require "../../lib/JsHttpRequest/JsHttpRequest.php"; 
// Init JsHttpRequest and specify the encoding. It's important!
$JsHttpRequest 			=& new JsHttpRequest($charset);
$pCode 					= '';
/*утилизация ненужного кода и проверка 
корректности данных перед помещением
в файл или базу данных на твоей совести!)
я только обрежу ненужные символы 
пустого пространства*/
$pCode 					= trim($_REQUEST['pCode']); 
if(!isset($_REQUEST['pCode'])||empty($pCode)){
		unset($charset,$pCode); //немного пребрались за собой
	echo('Ошибка передачи'); /*
	в том случае если ниего не было передано мы печатаем сообщение, которое
	будет перехвачено библиотекой и отправлено во фронтенде в ошибки
	читай доки по библиотеке*/
	exit;
}
/* действия над полученным нами кодом страницы
 и пример как передать данные из файла пхп обратно файлу клиента*/
$str = 'Передача данных произошла успешно';
$GLOBALS['_RESULT'] 	= array(
      "str"   			=> $str
    );
	unset($charset,$pCode,$str); //немного пребрались за собой

?>
Все писалось "с коленки" - но ошибки вряд ли есть. Но ежели чего не так - стучись. И почитай плиз документацию к библиотеке по приведенной вверху ссылке.
 
  • Нравится
Реакции: sw04
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху