Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№126-04-2011 06:50:41

chikanok
Участник
 
Группа: Members
Зарегистрирован: 06-02-2008
Сообщений: 18
UA: Opera 11.1

FF doc.body.innerHTML отдает только часть кода

Добрый день.

По onLoad страницы надо выполнить regexp с заменами.

Выделить код

Код:

alert(doc.body.innerHTML)

Показывает только часть страницы.

Подумал, может алертом обрезается и ...

Выделить код

Код:

alert(doc.body.innerHTML.length)

Показывает 110000(с мелочью), а вся страница 300000+ символов.

Подумал что может какой-нибудь ограничение длины и пошел на страничку поменьше (80000+), длину вернул всего 25000+.

Скажите, пожалуйста, в чем мой косяк ?
Как мне получить всю страницу?

Отсутствует

 

№226-04-2011 07:21:50

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 4.0

Re: FF doc.body.innerHTML отдает только часть кода

chikanok
Используйте XPath - он работает непосредственно на DOM-структуре документа. И это оптимальнее с т.з. производительности.

Отсутствует

 

№326-04-2011 12:53:30

chikanok
Участник
 
Группа: Members
Зарегистрирован: 06-02-2008
Сообщений: 18
UA: Opera 11.1

Re: FF doc.body.innerHTML отдает только часть кода

hydrolizer пишет

chikanok
Используйте XPath - он работает непосредственно на DOM-структуре документа. И это оптимальнее с т.з. производительности.

Xpath не подходит, я не знаю где и сколько будет элементов под замену.
Нужен именно текстовый поиск по HTML коду.

Отсутствует

 

№426-04-2011 14:25:54

arhberk
Участник
 
Группа: Members
Зарегистрирован: 06-11-2010
Сообщений: 15
UA: Firefox 4.0

Re: FF doc.body.innerHTML отдает только часть кода

Может попробовать через интерфейс nsIDOMSerializer? У него есть метод SerializeToString.

Выделить код

Код:

var s = new XMLSerializer();
var d = document;
var str = s.serializeToString(d);
alert(str);

Отсутствует

 

№526-04-2011 14:51:21

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Nightly 6.0

Re: FF doc.body.innerHTML отдает только часть кода

Что-то типа бага 644196, по-видимому.

Отсутствует

 

№626-04-2011 15:07:44

chikanok
Участник
 
Группа: Members
Зарегистрирован: 06-02-2008
Сообщений: 18
UA: Opera 11.1

Re: FF doc.body.innerHTML отдает только часть кода

FireBug в тоже время показывает полный innerHTML.
Как он его получает?

Добавлено 26-04-2011 15:32:29
Вот весь мой код связанный с этим

Выделить код

Код:

....
gBrowser.addEventListener("load", OO.OnDocumentLoad, true);
....
    OnDocumentLoad:function(event)
    {
        if (event.originalTarget instanceof HTMLDocument) 
        {
            if (!event.originalTarget.defaultView.frameElement) 
            {
                var doc = event.originalTarget.defaultView.document;
                                                        doc.body.innerHTML=doc.body.innerHTML.replace(rx,form);
            }
        }
    },
...

Отсутствует

 

№726-04-2011 15:47:37

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 4.0

Re: FF doc.body.innerHTML отдает только часть кода

chikanok пишет

Xpath не подходит, я не знаю где и сколько будет элементов под замену.

Ну и что? У вас же есть критерии для поиска? Вот сколько элементов будет удовлетворять этим критериям, столько XPath (соответствующим образом составленный, разумеется) и найдет. А использовать текстовый поиск в данном случае - это примерно как вместо того, чтобы использовать getElementById() - брать тот же innerHTML в виде plain text, и в нем искать с помощью indexOf("id=\"myElementId\"").

Отсутствует

 

№826-04-2011 17:17:38

chikanok
Участник
 
Группа: Members
Зарегистрирован: 06-02-2008
Сообщений: 18
UA: Opera 11.1

Re: FF doc.body.innerHTML отдает только часть кода

hydrolizer пишет
chikanok пишет

Xpath не подходит, я не знаю где и сколько будет элементов под замену.

Ну и что? У вас же есть критерии для поиска? Вот сколько элементов будет удовлетворять этим критериям, столько XPath (соответствующим образом составленный, разумеется) и найдет. А использовать текстовый поиск в данном случае - это примерно как вместо того, чтобы использовать getElementById() - брать тот же innerHTML в виде plain text, и в нем искать с помощью indexOf("id=\"myElementId\"").

Улыбнуло.

Заказчикам примерно тоже говорил, но нет.


Вообщем незнаю что я сделал, но оно заработало :)
Тему можно закрывать.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]