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

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

№114-03-2006 14:53:27

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

range для всего документа

мне нужно получить текст всего документа в плане строку содержащую весь текст присутствующий на странице, не HTML, т.е. без тегов для набора своего рода статистики по встречающимся на странице словам.  Есть вроде интерфейс nsIDOMDocumentRange у которого можно попросить range кот-й потом toString и вроде то что мне надо. Но не знаю как получить этот самый nsIDOMDocumentRange, или может есть другие пути?
Спасибо.

Отсутствует

 

№214-03-2006 15:50:32

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: range для всего документа

Можно так:

Выделить код

Код:

function getTopWin ()
{
    var windowManager = Components. classes ['@mozilla.org/appshell/window-mediator;1']. getService();
    var windowManagerInterface = windowManager.
                                 QueryInterface (Components. interfaces. nsIWindowMediator);
    var topWindowOfType = windowManagerInterface. getMostRecentWindow ("navigator:browser");
    
    if (topWindowOfType)
    {
        return topWindowOfType;
    }
    return null;
}

function getContent ()
{
    var cont = getTopWin (). getBrowser (). contentDocument;
    var c2 = cont;
    try
    {
        cont = new XPCNativeWrapper (cont). wrappedJSObject;
    } catch(e) {}
    if (!cont)
        cont = c2;
    return cont;
}
print (getContent (). firstChild. nextSibling. textContent);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№314-03-2006 16:37:52

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

Re: range для всего документа

Anton пишет

Можно так:

Выделить код

Код:

function getTopWin ()
{
    var windowManager = Components. classes ['@mozilla.org/appshell/window-mediator;1']. getService();
    var windowManagerInterface = windowManager.
                                 QueryInterface (Components. interfaces. nsIWindowMediator);
    var topWindowOfType = windowManagerInterface. getMostRecentWindow ("navigator:browser");
    
    if (topWindowOfType)
    {
        return topWindowOfType;
    }
    return null;
}

function getContent ()
{
    var cont = getTopWin (). getBrowser (). contentDocument;
    var c2 = cont;
    try
    {
        cont = new XPCNativeWrapper (cont). wrappedJSObject;
    } catch(e) {}
    if (!cont)
        cont = c2;
    return cont;
}
print (getContent (). firstChild. nextSibling. textContent);

не работает:

TypeError: getContent().firstChild.nextSibling has no properties

Отсутствует

 

№414-03-2006 16:44:47

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: range для всего документа

cesspit пишет

...
не работает:

TypeError: getContent().firstChild.nextSibling has no properties

Поясню: getContent().firstChild.nextSibling - это HTML документ. Можете получить его другим каким-нибудь способом.
Можно ещё уточнить (в моих обозначениях): getContent().firstChild.nextSibling.firstChild.nextSibling - если у документа есть <DOCTYPE>, и разделы <head> и <body>.

И ещё: в textContent попадают комментарии (<!-- ... -->).


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№514-03-2006 17:10:01

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

Re: range для всего документа

Anton пишет
cesspit пишет

...
не работает:

TypeError: getContent().firstChild.nextSibling has no properties

Поясню: getContent().firstChild.nextSibling - это HTML документ. Можете получить его другим каким-нибудь способом.
Можно ещё уточнить (в моих обозначениях): getContent().firstChild.nextSibling.firstChild.nextSibling - если у документа есть <DOCTYPE>, и разделы <head> и <body>.

И ещё: в textContent попадают комментарии (<!-- ... -->).

спасибо, ключевой момент кот-й я вынес - св-во textContent, про которое я не знал. Чтобы не тащить за собой комментарии (и скрипты вдобавок :) ), мне тогда будет удобнее брать textContent у content.document.body.
Спасибо.

Отсутствует

 

Board footer

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