Имя: Пароль:
1C
 
v8: Как получить код HTML документа после применения скриптов?
0 Гений 1С
 
гуру
13.05.07
11:04
Вот для примера у меня код:

<B>SOURCE</B>
<SCRIPT language="JavaScript"> document.write("<I>ROBOT</I>")</SCRIPT>

А документ выглядит так:
<B>SOURCE</B>
<I>ROBOT</I>

Как получить этот документ после применения скриптов?

Как то уже спрашивал, мне ответили, что возможно, но забыл блин, перерыл всю объектную модель, не могу найти... ;-(
1 Шурик71
 
13.05.07
11:51
.InnerHTML ?
2 Шурик71
 
13.05.07
11:53
точнее, innerHTML
3 Гений 1С
 
гуру
13.05.07
11:53
(1) неа, не помогает.
4 Гений 1С
 
гуру
13.05.07
11:59
documentElement.innerHtml:

<HEAD></HEAD>
<BODY><B>SOURCE</B>
<SCRIPT language=JavaScript> document.write("<I>ROBOT</I>")</SCRIPT>
<I>ROBOT</I> </BODY>

documentElement.innerText:

SOURCE ROBOT
5 Звездочёт
 
13.05.07
17:12
(4) почему бы не сделать некий div, куда вставлять свой html-код?
И после этого читать его innerHTML.
6 Гений 1С
 
гуру
13.05.07
19:03
(5) нет, блин, раньше мне подсказали, хоть убейте. не могу найти ветку или вспомнить способ, там что-то было с рекурсивным обходом, даже скрипт писал. ;-)
7 Гений 1С
 
гуру
15.05.07
11:00
Господи, как я туплю, в (4) все уже есть, нужно только теги <SCRIPT> вышвырнуть.
А интересно, InnerHtml применяет таблицы стилей или только скрипты?
8 sergeante
 
15.05.07
11:59
(7) а при чём тут CSS?
9 Гений 1С
 
гуру
15.05.07
12:14
(8) ну css тоже заменяется, или HTML остается неизменным?
ну то бишь в иннерХТМЛ хранится HTML после применения стилей, или без применения стилей.
10 sergeante
 
15.05.07
13:20
(9) css не заменяется, просто его интерпретирует браузер для отображения хтмл. Т.е. ХТМЛ остаётся неизменным, в отличии от применения скрипта.
11 Гений 1С
 
гуру
15.05.07
14:14
(10) понятненько. ;-)
12 Гений 1С
 
гуру
15.05.07
16:22
Господа, встал вопрос, а как получить исходный код HTML, потому что что в InnerHTML, что в OuterHTML хранится смесь скрипта с его продукцией:


<HTML><HEAD></HEAD>
<BODY><B>SOURCE</B>
<SCRIPT language=JavaScript> document.write("<I>ROBOT</I>")</SCRIPT>
<I>ROBOT</I> </BODY></HTML>

Видите, ROBOT повторяется дважды.

Кстати, конечный HTML (убирая из outerHtml, я получаю так):


Функция обПолучитьКонечныйHTMLКодHTMLУзла(Узел) Экспорт
   Если Узел.tagName="SCRIPT" Тогда
       Возврат "";
   КонецЕсли;
   //Если Р="" Тогда
   Если Узел.children.length=0 Тогда
       Возврат Узел.outerHTML;
   КонецЕсли;
   Р="";
   Для Каждого Эл ИЗ Узел.children Цикл
       Р=Р+обПолучитьКонечныйHTMLКодHTMLУзла(Эл);
   КонецЦикла;
   //Выделяем часть inner из outer
   Поз=Найти(Узел.OuterHtml,Узел.InnerHtml);
   Если Поз<>0 Тогда
       Р=Лев(Узел.OuterHtml, Поз-1)+Р+Прав(Узел.OuterHtml, СтрДлина(Узел.OuterHtml)-СтрДлина(Узел.InnerHtml)-Поз+1);
   КонецЕсли;
   
   Возврат Р;
КонецФункции

Функция обПолучитьКонечныйHTMLКодHTMLДокумента(Документ) Экспорт
   Если Документ.documentElement=Неопределено Тогда
       Возврат "";
   КонецЕсли;
   Возврат обПолучитьКонечныйHTMLКодHTMLУзла(Документ.documentElement);
КонецФункции



Такой вариант, как предложил товарищ выше не годится, потому что script может встречаться многократно и в составе текстовых строк. ;-)
13 Гений 1С
 
гуру
16.05.07
11:31
эй, сенсейи!