请教高人如果使用IWebBrowser2控件,同时可缓存Cookie-CSDN论坛

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教高人如果使用IWebBrowser2控件,同时可缓存Cookie-CSDN论坛相关的知识,希望对你有一定的参考价值。

参考技术A 在浏览器导航改变后,判断是不是退出的url地址,则清空WEBBROWSER cookie 容器。设置cookie 过期需要关闭WEBBROWSER 才会删除系统中的cookie文件。 参考技术B publicstaticclassCookieHelperpublicstaticvoidSetCookie(Uriuri,Stringname,Stringvalue,DateTimeexpirationDate)Stringcookie=String.Format("0=1;expires=2",name,value,GetExpirationDateString(expirationDate));Application.SetCookie(uri,cookie);publicstaticStringGetCookie(Uriuri)returnApplication.GetCookie(uri);privatestaticStringGetExpirationDateString(DateTimeexpirationDate)returnexpirationDate.ToString("ddd,dd-MMM-yyyyHH:mm:ss")+"GMT";

尝试在单独的线程中创建 IWebBrowser2 控件时未创建

【中文标题】尝试在单独的线程中创建 IWebBrowser2 控件时未创建【英文标题】:IWebBrowser2 control not getting created when tried to do it in seperate thread 【发布时间】:2012-07-12 09:40:01 【问题描述】:
    void CUIPopupWnd::ieThreadProc(MSG* msg, LPVOID lpParameter)

    CUIPopupWnd *ptrPopUpWndCtrl = (CUIPopupWnd*)GetWindowLongPtr((HWND)msg->wParam , GWLP_USERDATA);
    switch(msg->message)
    
    case WM_IECREATE:
        
            REPORT_INTERNAL_SW_ERROR_EXT(L"HTML frame is going to be created.");        
            ptrPopUpWndCtrl->m_htmlAttributes.pBrowser = new (nothrow)CUIHTMLFrameWnd((HWND)msg->wParam,ptrPopUpWndCtrl->m_ulPresentWidth,ptrPopUpWndCtrl->m_ulPresentHeight);              

            if( NULL == ptrPopUpWndCtrl->m_htmlAttributes.pBrowser )
            
                REPORT_INTERNAL_SW_ERROR_EXT(L"EmbeddedBrowser failed");
            
            else
            
                //m_htmlAttributes.pBrowser->createControl(this->m_hWnd,this->m_ulPresentWidth,this->m_ulPresentHeight);
                ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->m_currentURL = ptrPopUpWndCtrl->m_htmlAttributes.m_szHTMLPath;
                ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->RepaintBrowser();
                ptrPopUpWndCtrl->m_htmlWindowsList.push_front(ptrPopUpWndCtrl);
                ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->Navigate(ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->m_currentURL);
                       
        
        break;
    case WM_IEREFRESH:
                   
            ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->Navigate(ptrPopUpWndCtrl->m_htmlAttributes.pBrowser->m_currentURL);
            ptrPopUpWndCtrl->m_htmlAttributes.m_fReloadRequired = false;

        
        break;  
    default:
        return;
    

    CThreadController::getThreadController().createUIThread( ieThreadProc, IEThread,NULL );
            CThreadController::getThreadController().postThreadMessage(IEThread,WM_IECREATE,(_wparam)this->m_hWnd,0);

CThreadController::getThreadController().postThreadMessage(IEThread,WM_IEREFRESH,(_wparam)this->m_hWnd,0);

这里,ieThreadProc 是一个静态线程 proc。我有 Win32 窗口 (this->m_hWnd),它应该是这个 IWebBrowser2 com 控件的父级。由于跨线程问题,我将消息发布到线程所在的线程IE 控件被创建并使用它。在调试时它没有显示任何破损。但是,IE 控件只是显示空白,没有显示页面。请帮助我解决问题。

【问题讨论】:

【参考方案1】:

浏览器通过窗口消息异步操作。确保拥有浏览器窗口的线程的消息循环正在处理发往浏览器窗口的消息,例如在从线程的消息队列中检索它们之后将它们传递给TranslateMessage()DispatchMessage()(如果它是还没有这样做 - 很难说,因为您没有展示 createUIThread()ieThreadPorc() 之外所做的事情。

【讨论】:

以上是关于请教高人如果使用IWebBrowser2控件,同时可缓存Cookie-CSDN论坛的主要内容,如果未能解决你的问题,请参考以下文章

请教高人C51单片机C语言中的中断优先级怎么设置?

尝试在单独的线程中创建 IWebBrowser2 控件时未创建

UnsafeNativeMethods.IWebBrowser2.Navigate2 中的 HRESULT E_FAIL

IWebBrowser2绑定到我的WIN32窗体上去

如何获得活动的 x 控件

vc++,使用IWebBrowser2组件打开网页时,怎么得知网页打开是不是完毕?怎么主动停止打开网页?