Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CppWebBrowser и фреймы

386
28 июня 2006 года
newcss
297 / / 05.04.2005
Есть страничка на ней 5 фреймов, срабатывает событие ОнДокументКомплет, как узнать какой из фреймов обновился? Или точнее, как отлавливать обновление определенного фрейма?
386
05 июля 2006 года
newcss
297 / / 05.04.2005
Вообщем подумал подумал, если не могу решить влоб, пробую найти решение с другой стороны....
Призагрузке страницы в каждый фреймик добавляю пару тегов в виде комментария

 
Код:
pBody->insertAdjacentText (
L"AfterEnd",L"<!-- PREVED MEDVED KRASAVCHEG -->");


На данный способ почему-то не работает =(....
Когда срабатывает событие OnDocumentComplete остается только проверить фреймы - в каком фрейме нет такой красоты, тот значит обновился.
Может кто подскажет как воткнуть кусок кода в HTML файл?
246
05 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=newcss]
...
 
Код:
pBody->insertAdjacentText (
L"AfterEnd",L"<!-- PREVED MEDVED KRASAVCHEG -->");


На данный способ почему-то не работает =(....
[/QUOTE]
Не работает в каком смысле? Не добавляются комментарии? Приведи полный код пожайлуста, так не поймешь чего не работает.

[QUOTE=newcss]
Может кто подскажет как воткнуть кусок кода в HTML файл?[/QUOTE]
HTMLDocument2::write()
IHTMLDocument2::createElement()
как у тебя тоже можно...

А вообще что у нас есть фрейм? Броузер в документе или документ в документе?
386
05 июля 2006 года
newcss
297 / / 05.04.2005
Вообщем получаю я pDisp окна... Далее перебираю фреймы....
Нахожу нужный фрейм....
Код:
IHTMLWindow2 *pWindow = NULL;
....
IHTMLDocument2 *iDoc_logo=NULL;
 
// передаем управление к IHTMLDocument2
pWindow->get_document(&iDoc_logo);
 
 
IHTMLElement *pBody=NULL;
iDoc_logo->get_body(&pBody);
if(pBody!=NULL)
{
wchar_t *T,*uk;
T=NULL;
uk=NULL;
pBody->get_innerHTML(&T);
 
if(T!=NULL)uk=wcsstr(T,L"ТЕСТ_ФРЕЙМ");
if(uk!=NULL)
{
ShowMessage("Фреймик старый");
}
else
{
// вставляем кусочек кода в ШТМЛ
pBody->insertAdjacentHTML(L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");
ShowMessage("Фрейм обновлен");
 
 
}


Вот этот кусок кода срабатывает каждый раз когда срабатывает событие OnDocumentComplete
но почему-то не работает
 
Код:
pBody->insertAdjacentText (L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");


Каждый раз пишет
 
Код:
ShowMessage("Фрейм обновлен");


Пробовал посмотреть на результат, после инъекции ШТМЛ текста получал содержимое ШТМЛ заново но там нет

 
Код:
<!-- ТЕСТ_ФРЕЙМ -->
19K
06 июля 2006 года
cast
3 / / 06.07.2006
 
Код:
pBody->insertAdjacentHTML(L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");
pBody->get_innerHTML(&T);
if(T!=NULL)
 k=wcsstr(T,L"ТЕСТ_ФРЕЙМ");
if(uk!=NULL) {
 ShowMessage("Фреймик  старый");
}
386
06 июля 2006 года
newcss
297 / / 05.04.2005
[quote=cast]
 
Код:
pBody->insertAdjacentHTML(L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");
pBody->get_innerHTML(&T);
if(T!=NULL)
k=wcsstr(T,L"ТЕСТ_ФРЕЙМ");
if(uk!=NULL) {
ShowMessage("Фреймик старый");
}
[/quote]

Неа =( не работает =(
246
06 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=newcss]Вообщем получаю я pDisp окна... Далее перебираю фреймы....
Нахожу нужный фрейм....
Код:
IHTMLWindow2 *pWindow = NULL;
....
IHTMLDocument2 *iDoc_logo=NULL;
 
// передаем управление к IHTMLDocument2
pWindow->get_document(&iDoc_logo);
 
 
IHTMLElement *pBody=NULL;
iDoc_logo->get_body(&pBody);
if(pBody!=NULL)
{
wchar_t *T,*uk;
T=NULL;
uk=NULL;
pBody->get_innerHTML(&T);
 
if(T!=NULL)uk=wcsstr(T,L"ТЕСТ_ФРЕЙМ");
if(uk!=NULL)
{
ShowMessage("Фреймик старый");
}
else
{
// вставляем кусочек кода в ШТМЛ
pBody->insertAdjacentHTML(L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");
ShowMessage("Фрейм обновлен");
 
 
}


Вот этот кусок кода срабатывает каждый раз когда срабатывает событие OnDocumentComplete
но почему-то не работает
 
Код:
pBody->insertAdjacentText (L"AfterEnd",
L"<!-- ТЕСТ_ФРЕЙМ -->");


Каждый раз пишет
 
Код:
ShowMessage("Фрейм обновлен");


Пробовал посмотреть на результат, после инъекции ШТМЛ текста получал содержимое ШТМЛ заново но там нет

 
Код:
<!-- ТЕСТ_ФРЕЙМ -->
[/QUOTE]
1. я конечно не тормоз могу и домыслить, но ты уж пожайлуста не напрягай меня:) Я в отпуске мозги плавятся, пиво каждый день... Как и где получил IHTMLWindow2?

2. Я сейчас соображаю плохо по причине указанной выше, но почему бы не сделать так:
Код:
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
      LPDISPATCH pDisp, TVariant *URL)
{
    Memo1->Lines->Add("DocumentComplete"); // trace
    TComInterface<IWebBrowser2> pBrowser;

    if(SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(LPVOID*)&pBrowser))/* && pBrowser*/)
    {
        Memo1->Lines->Add("QueryInterface SUCCEEDED"); // trace
        WideString wsURL;
        pBrowser->get_LocationURL(&wsURL);
        Memo1->Lines->Add("LocationURL - " + wsURL);  // trace
    }
    else
        Memo1->Lines->Add("QueryInterface FAIL"); // trace
}

Ведь OnДокументКомплит происходит для каждого фрейма и по УРЛ можно опознать нужный, а?
386
06 июля 2006 года
newcss
297 / / 05.04.2005
Хм.... хитро =))) Сейчас попробую...

---------------------
Спустя 15 мин:

Хы =) классс =) пасиб =) помогло.
386
06 июля 2006 года
newcss
297 / / 05.04.2005
Еще проблемка... вопрос не в тему... но раз так пишешь значит знаешь...
 
Код:
TComInterface<IWebBrowser2> pBrowser;


Чтобы использовать TComInterface, какой нужен компонент???? А то если просто так писать ругается =(
246
07 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=newcss]Еще проблемка... вопрос не в тему... но раз так пишешь значит знаешь...
 
Код:
TComInterface<IWebBrowser2> pBrowser;


Чтобы использовать TComInterface, какой нужен компонент???? А то если просто так писать ругается =([/QUOTE]
#include <utilcls.h>

можешь и без него обойтись:
 
Код:
IWebBrowser2* pBrowser;
pDisp->QueryInterface(IID_IWebBrowser2,(LPVOID*)&pBrowser))
...       //use
pBrowser->Release();
386
07 июля 2006 года
newcss
297 / / 05.04.2005
Хм... а если использовать [COLOR=#000000][COLOR=#0000bb]TComInterface[/COLOR][COLOR=#007700]<[/COLOR][COLOR=#0000bb]IWebBrowser2[/COLOR][COLOR=#007700]> [/COLOR][COLOR=#0000bb]pBrowser[/COLOR][COLOR=#007700];
, то [COLOR=#000000]pBrowser->Release(); писать ненадо?[/COLOR][/COLOR][/COLOR]
246
07 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=newcss]Хм... а если использовать [COLOR=#000000][COLOR=#0000bb]TComInterface[/COLOR][COLOR=#007700]<[/COLOR][COLOR=#0000bb]IWebBrowser2[/COLOR][COLOR=#007700]> [/COLOR][COLOR=#0000bb]pBrowser[/COLOR][COLOR=#007700];
, то [COLOR=#000000]pBrowser->Release(); писать ненадо?[/COLOR][/COLOR][/COLOR][/QUOTE]
Когда-нибудь слышал о интеллектуальных указателях? Загляни в utilcls.h:
Код:
...
~TComInterface()
  {
    Reset();
  }
  ...
  void Reset(T* p = 0)
  {
    if (intf)
      intf->Release();
    intf=p;
  }

он делает ЭТО сам.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог