IHTMLTxtRange, проблема с findText в IE8
От: ElvisNsk Россия  
Дата: 19.11.09 18:10
Оценка:
проблема такая:
когда искомый текст (search) содержится в lpWorkRange не разделенный тегами — все нормально, но если искомый текст разделен тегами, то findText возвращает VARIANT_FALSE.
пример: если search=="123456", lppTxtRange->get_htmlText возвращает "!!!123456 <b>123</b>456!!!" и lppTxtRange->get_text возвращает "!!!123456 123456!!!"
тогда первое вхождение найдется, а второе нет, потому что оно разделено тегами.
проблема воспроизводится только в ИЕ8 без включенного Compatibility mode.

если в ИЕ8 включить Compatibility mode, то все работает отлично даже со словами разделенными тегами!
так же замечено, что если из начала документа убрать <!DOCTYPE HTML>, то все начинает работать нормально.

код такой:

    CComBSTR search = search_context;
    CComPtr<IHTMLTxtRange> lpWorkRange;
    lppTxtRange->duplicate(&lpWorkRange);
    long t;
    lpWorkRange->moveEnd((BSTR)CComBSTR("Textedit"),1,&t);
    
    const LONG mask = 0;
    VARIANT_BOOL bFound = VARIANT_TRUE;
    HRESULT hr = lpWorkRange->findText(search, 0, mask, &bFound);
    while(SUCCEEDED(hr) && bFound==VARIANT_TRUE)
    {
        
        //двигаем начало рейнджа, в котором будем искать в следующий раз на конец рейнджа замены
        if (!SUCCEEDED(lppTxtRange->setEndPoint((BSTR)CComBSTR(_T("StartToEnd")), lpWorkRange)))
        {
            ATLTRACE(_T("could not setEndPoint! \r\n"));
            break;
        }
        
        lpWorkRange->pasteHTML(_T("<b>Repaced Text</b>"));

        hr = lpWorkRange->findText(search, 0, mask, &bFound);
    }
Re: IHTMLTxtRange, проблема с findText в IE8
От: ElvisNsk Россия  
Дата: 20.11.09 07:42
Оценка:
проблема решена, на данный момент это баг в IE8 и они его подтвердили. придется искать ручками.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.