есть код

Выделить код

Код:

window.addEventListener("load",function(){
    gBrowser.addEventListener("DOMContentLoaded", function(aEvent){SomeEvent(aEvent);}, false);    
},false);


function SomeEvent(aEvent)
{

}

Вопрос: как в функции  SomeEvent получить отренедеренный контент страницы, тоесть без html тегов и с уже выполненным JS.
Спасибо.

причем здесь картинка? нужно получить текст со страницы.

или подскажите где можно почитать про обьект aEvent  корторый передается в SomeEvent(). документацию не получилось найти

и еще вопрос, можно ли из плагина отправить AJAX запрос на сторонний сервер. необходимо передать информацию. пробую, не получается.

почему не могу получить доступ к window.document.body.innerText?

k0s пишет

и еще вопрос, можно ли из плагина отправить AJAX запрос на сторонний сервер.

А есть ещё и несторонний какой-то?
Под плагином вы имеете в виду расширение, наверное.
Можно.

k0s пишет

почему не могу получить доступ к window.document.body.innerText?

Потому что undefined, вестимо. Используйте document.body.textContent

luitzen пишет

Можно.

Как?

пробую так

Выделить код

Код:

function getXmlHttp()
{
    var xmlhttp;
    try 
    {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) 
    {
        try 
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) 
        {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
        xmlhttp = new XMLHttpRequest();

    return xmlhttp;
}

function sendRequest(url, query)
{

    var httpRequest = getXmlHttp();
    var timeout;

    if(query == null)
        httpRequest.open('GET', url, true);
    else
        httpRequest.open('POST', url, true);
    
    httpRequest.onreadystatechange = function(){
        

        if (httpRequest.readyState != 4)
            return;
        
        clearTimeout(timeout);
    
        alert("State: "+httpRequest.status);
        //if (httpRequest.status == 200)
        
            alert(httpRequest.responseText);
    }

    if(query != null)
        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    httpRequest.send(query);


    timeout = setTimeout(function(){
        try{
            httpRequest.abort();
        
        }catch(e){}
    }, 30000);  // таймаут

    
}

но httpRequest.status  всегда равен 0

luitzen пишет

Используйте document.body.textContent

вылетает ошибка TypeError: document.body has no properties

k0s пишет

вылетает ошибка TypeError: document.body has no properties

Вы, наверное, в chrome mode это делаете? Там как-то так:

Выделить код

Код:

gBrowser.contentDocument.body.textContent
k0s пишет

скрытый текст

Выделить код

Код:

try 
    {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) 
    {
        try 
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) 
        {
            xmlhttp = false;
        }
    }

Потрудитесь построить минимальный пример, пожалуйста :).

luitzen пишет

Потрудитесь построить минимальный пример, пожалуйста .

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

k0s пишет

Минимальный пример чего?

Вашей проблемы. Без проверки на микрософтовость, без выбора между 'GET' и 'POST', без таймаутов. Это упростило бы просмотр вашего кода и увеличило бы количество желающих это сделать :).

Пока что, бегло проскроллив ваш код, могу предложить, что вы тягаете локальный файл откуда-нибудь с "file:///C:", вот и получаете 0 вместо 200.

C AJAX разобрался, спасибо. А что с получением контента страницы? gBrowser.contentDocument.body.textContent не  прокатывает. у contentDocument нет body

неужели никто не сталкивался с необходимостью получить содержимое страницы при разработке расширения?

Что-то  вас неочень понимаю. Вы хотите получить «отрендеренный контент» страницы, которую берёте AJAX-запросом?

В прежнем совете подразумевался контент страницы, открытой в активной вкладке текущего окна.

нет, это было 2а разных вопроса. Пенрвый вопрос про AJAX я уже выяснил, остался второй как получить контент, тот который на обычной странице доступен в  window.document.body.innerText
При обращении из расширения к window.document.body.innerText там ничего нет

k0s пишет

При обращении из расширения к window.document.body.innerText там ничего нет

Во-первых, innerText — это микрософтовский атрибут.

Во-вторых, браузер сам написан на некотором разметочном языке (XUL). В этом «xul-документе» есть свои window и document. Это не те window и document, которые есть у HTML-документа во вкладке.

Вот вы попробуйте сказать "alert(window)" в консоли ошибок. Получите не то же самое, если бы сказали "javascript: alert(window)" в адресной строке.

Почитайте про Tabbed Browser и про Working_with_windows_in_chrome_code.

про окна я понял. Сссылки почитал, но ответа на свой вопрос так и не нашол
есть код

Выделить код

Код:

window.addEventListener("load",function(){
    gBrowser.addEventListener("DOMContentLoaded", function(aEvent){SomeEvent(aEvent);}, false);    
},false);


function SomeEvent(aEvent)
{

}

Нужно получить контент страницы для которой вызвалась функция SomeEvent, я предполагал что он будет в aEvent но его там нет(

С кастомной кнопки нижеследующее у меня работает. Или проблема не в этом?

Выделить код

Код:

gBrowser.addEventListener ("DOMContentLoaded", someEvent, false);

function someEvent(aEvent) {
    alert(aEvent.originalTarget.body.textContent);
}

В примерах по ссылкам слушатели вешаются на другие объекты и фильтруются фреймы.