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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№117-05-2006 17:38:17

Hypper
 
Группа: Guest

Вопрос по написанию расширения

Здравствуйте!

Есть боевая задача - расширение должно по нажатию кнопки идти на некоторый урл, выдирать оттуда некоторые данные и предоставлять их.
Хотелось бы работать с DOM.
Проблема в том, что получать данные надо, не открывая нового окна/таба и не в текущем - то есть невидимо для пользователя.
Получить данные у меня получилось только с помощью XMLHttpRequest. Но из него содержимое можно извлечь только responseText, так как responseXML возвращает null. А со строкой работать с DOM не удается.
Подскажите, пожалуйста гуманное решение.
Я вижу два варианта - получать таки объект Document (но не знаю как) или из строки (целиком html файл) его создавать (опять же не знаю, как). И, конечно, хотелось бы это делать максимально просто.

Спасибо.
ЗЫЖ Или посоветуйте, где еще об этом спросить. Языком наиболее вероятного противника владею слабо.

 

№217-05-2006 17:58:29

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Вопрос по написанию расширения

из строки (целиком html файл) его создавать

Через innerHTML. Сталкивался с такой же проблемой, но других вариантов не нашел.

Но:

...при этом проявляется очень существенный недостаток - подгружаются все картинки, внешние css-стили, js-скрипты, и другие встроенные в документ файлы - идет совершенно ненужный трафик.

Поэтому:

...перед тем, как сделать innerHTML ... -- пройтись регулярками и поменять все import/src/data/href/.. (например, на _import/_src/_data/_href/_..)

Отсутствует

 

№317-05-2006 17:59:38

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Вопрос по написанию расширения

Спросить еще можно тут:
xpoint.ru/forums/programming/XUL/forum.xhtml

Отсутствует

 

№418-05-2006 12:23:33

Hypper
 
Группа: Guest

Re: Вопрос по написанию расширения

Yan пишет

из строки (целиком html файл) его создавать

Через innerHTML. Сталкивался с такой же проблемой, но других вариантов не нашел.

Но:

...при этом проявляется очень существенный недостаток - подгружаются все картинки, внешние css-стили, js-скрипты, и другие встроенные в документ файлы - идет совершенно ненужный трафик.

Поэтому:

...перед тем, как сделать innerHTML ... -- пройтись регулярками и поменять все import/src/data/href/.. (например, на _import/_src/_data/_href/_..)

Спасибо, но мне надо несколько более экзотическое :-)
Мне надо не загружать ничего в видимые места броузера.
Чтобы пользователь просто нажал кнопочку на тулбаре, покурил пару минут и все. При этом окно броузера должно оставаться тем, где он был до нажатия кнопки (никак не меняться) , а новых окон/табов не открывать. Короче - чтобы все операции происходили незаметно для пользователя. Можно такое или я слишком многого хочу?

 

№518-05-2006 17:52:11

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Вопрос по написанию расширения

Вообще можно. Но innerHTML всё равно надо куда-то применять. Например, через DOM создать невидимый iframe, и вставить туда innerHTML.
Потом приведу примерный код.

Отсутствует

 

№618-05-2006 18:08:14

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Вопрос по написанию расширения

Нашел свой давний черновик:

Выделить код

Код:

function parseText(text){
	var iframe=document.createElement('iframe');
	iframe.style.visibility='hidden';
	iframe.style.width="0";
	iframe.style.height="0";
	document.documentElement.appendChild(iframe);
	var doc=iframe.contentDocument;
	document.documentElement.removeChild(iframe);
	doc.documentElement.innerHTML=text.replace(/\bhref=/g,'_href=').replace(/\bsrc=/g,'_src=').replace(/\bHREF=/g,'_href=').replace(/\bSRC=/g,'_src=');
	return doc;
}

var url="http://ya.ru";
var xrequest=new XMLHttpRequest();
xrequest.open("GET",url,true);
xrequest.onreadystatechange = function () {
 if (xrequest.readyState==4){
  var result=xrequest.responseText;
  var doc=parseText(result);                               //doc - готовое DOM-дерево
  var ar=doc.getElementsByTagName('DIV');      //тестируем
  alert(ar[0].innerHTML);                                      //тестируем
 }
};
xrequest.send('');

Криво, но работает.

Отсутствует

 

№718-05-2006 19:02:19

Hypper
 
Группа: Guest

Re: Вопрос по написанию расширения

Yan пишет

Вообще можно. Но innerHTML всё равно надо куда-то применять. Например, через DOM создать невидимый iframe, и вставить туда innerHTML.
Потом приведу примерный код.

Как в примере http://www.xulplanet.com/tutorials/mozsdk/xmlparse.php - просто создать документ, а не лепить невидимый ифрейм. Только там XML документ создается, а создать пустой HTMLDocument аналогичным образом у меня никак не получилось. Вот пустой документ HTML, свободно болтающийся в памяти, - совсем нелья? XML-то можно...
Потому ка с ифреймом и правда не больно красиво.

Спасибо за код.

 

№818-05-2006 20:37:21

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Вопрос по написанию расширения

Hypper

Только там XML документ создается, а создать пустой HTMLDocument аналогичным образом у меня никак не получилось.

Вот у меня тоже что-то не получалось, вот я и iframe создал.

Т.е. создать-то по-моему получилось, но при вставке innerHTML DOM-дерево вроде не строилось, точно не помню. Да, и если создавать iframe, но не цеплять его к документу, то опять-таки DOM-дерево не строится..

Отсутствует

 

№925-05-2006 17:07:10

Semen
 
Группа: Guest

Re: Вопрос по написанию расширения

Воспользуйся технологией AJAX

 

Board footer

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