Объектная модель Internet Explorer
От: tomek Украина  
Дата: 29.06.05 21:22
Оценка:
Здравствуйте, уважаемые господа!
Уж не знаю, пару дней назад мой вопрос то ли показался слишком сложным, то ли я неясно его объяснил. У меня назрел вот какой.
Гляньте на вот этот код :

void CSuperHook::BeforeNavigate2(IDispatch* pDisp,
    VARIANT* url,
    VARIANT* Flags,
    VARIANT* TargetFrameName,
    VARIANT* PostData,
    VARIANT* Headers,
    VARIANT* Cancel){
    
  BSTR bstrUrl = GetBSTR(url);
  BSTR target = GetBSTR(TargetFrameName);
  
  if (!bstrUrl) return;

  if (!target && (_wcsnicmp(bstrUrl,L"http",4) == 0)) // cancel it, and redo it
  {
     CComPtr<IWebBrowser2> pWeb2;
     if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(void**)&pWeb2)))
     { 
        // cancel navigation
        *Cancel->pboolVal = VARIANT_TRUE;
        // create param
        VARIANT frame;
        frame.vt = VT_BSTR;
        frame.bstrVal = SysAllocString(L"_blank");
        // do it
        pWeb2->Stop();
        pWeb2->Navigate2(url,Flags,&frame,PostData,Headers);
        // clean up
        SysFreeString(frame.bstrVal);
      }
  } 
  else if (wcsncmp(bstrUrl,L"about:blank",11) == 0)
  {
    CComPtr<IWebBrowser2> pWeb2;
    if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(void**)&pWeb2)))
    {
        // cancel navigation
        *Cancel->pboolVal = VARIANT_TRUE;

        VARIANT frame,url2;
        frame.vt = VT_BSTR;
        frame.bstrVal = SysAllocString(L"_blank");
        url2.vt = VT_BSTR;
        url2.bstrVal = SysAllocString(bstrUrl+11);
        // do it
        pWeb2->Stop();
        pWeb2->Navigate2(&url2,Flags,&frame,PostData,Headers);
        // clean up
        SysFreeString(frame.bstrVal);
        SysFreeString(url2.bstrVal);
    }
  }

}


Почему у меня при попытке навигации по определенному адресу в IE6 открывается новое окно и навигация в нем идет по вот этой бяке :
res://C:\WINNT\system32\shdoclc.dll/navcancl.htm ???
Или я в коде чего-то не понимаю или как ? кажется, явно указано :
        pWeb2->Stop();
        pWeb2->Navigate2(url,Flags,&frame,PostData,Headers); // go to specific address
        // clean up

.
Re: Объектная модель Internet Explorer
От: tomek Украина  
Дата: 29.06.05 21:46
Оценка:
Ребят ! Может поэтому :
In Internet Explorer 6 or later, you can navigate through code only within the same domain as the application hosting the WebBrowser control. Otherwise, this method is disabled.
(Это из MSDNa )

не может быть !!
Re: Объектная модель Internet Explorer
От: Haiodo Россия  
Дата: 30.06.05 04:20
Оценка:
Здравствуйте, tomek, Вы писали:

T>
T>void CSuperHook::BeforeNavigate2(IDispatch* pDisp,
T>    VARIANT* url,
T>    VARIANT* Flags,
// Похоже что тут они имеют значение по умолчанию. Но точно сказать не могу.
// Посмотрите на присутствие navOpenInNewWindow в данном наборе.
T>    VARIANT* TargetFrameName,
T>    VARIANT* PostData,
T>    VARIANT* Headers,
T>    VARIANT* Cancel){
    
T>  BSTR bstrUrl = GetBSTR(url);
T>  BSTR target = GetBSTR(TargetFrameName);
  
T>  if (!bstrUrl) return;

T>  if (!target && (_wcsnicmp(bstrUrl,L"http",4) == 0)) // cancel it, and redo it
T>  {
T>     CComPtr<IWebBrowser2> pWeb2;
T>     if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(void**)&pWeb2)))
T>     { 
T>        // cancel navigation
T>        *Cancel->pboolVal = VARIANT_TRUE;
T>        // create param
T>        VARIANT frame;
T>        frame.vt = VT_BSTR;
T>        frame.bstrVal = SysAllocString(L"_blank");
T>        // do it
T>        pWeb2->Stop();
                __variant_t vtFlags( LONG( 0 ) );
        pWeb2->Navigate2(url,vtFlags,&frame,PostData,Headers);
T>        // clean up
T>        SysFreeString(frame.bstrVal);
T>      }
T>  } 
T>  else if (wcsncmp(bstrUrl,L"about:blank",11) == 0)
...
T>


К примеру можно поставить Flags в 0. Более побробно нужно смотреть в MSDN по поводу данного параметра.
Re[2]: Объектная модель Internet Explorer
От: tomek Украина  
Дата: 30.06.05 12:45
Оценка:
H>// Похоже что тут они имеют значение по умолчанию. Но точно сказать не могу.
H>// Посмотрите на присутствие navOpenInNewWindow в данном наборе.

H>К примеру можно поставить Flags в 0. Более побробно нужно смотреть в MSDN по поводу данного параметра


А причем здесь флаги ? У меня в новом окне должна открыться ссылка просто, да и все. Новое окно появляется, а вместо открытого URL получаю ошибку....................
Re[3]: Объектная модель Internet Explorer
От: Аноним  
Дата: 01.07.05 22:35
Оценка:
Здравствуйте, tomek, Вы писали:


Look at last param of BeforeNavigate2(): VARIANT* Cancel;

If *Cancel = True, cancel the navigation operation;( don't need pWeb2->Stop())

Then to next event, for example DownloadBegin(), make your navigation,


__variant_t vtFlags( LONG( 0 ) );

pWeb2->Navigate2(url,vtFlags,&frame,PostData,Headers);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.