天天看点

c#winform使用webkit自定义扩展

最近研究了用webkit来做界面,非常舒服,主要实现就是webkit与winform的交互,那么就需要扩展webkit,增加一个函数可以调用c#的函数,同时webkit已经可以对document执行invokescript, 因此需要下载webkit源码,在DOMWindow.cpp中增加你想要要函数 void DOMWindow::ExternalCall(const String& page, const String& action,const String& param) { if (!m_frame) return; m_frame->document()->updateStyleIfNeeded(); Page* page = m_frame->page(); if (!page) return; page->chrome()->runExternalCall(m_frame, message); } =================== 同时需要在WebChromeClient.cpp种增加对应的执行函数 //page是用来标示页面,日后可以跨页面调用,action是方法名称,param是参数,这里可以用json的string作为参数, void WebChromeClient::runExternalCall(Frame*, const String& page, const String& action,const String& param) { COMPtr ui; if (SUCCEEDED(m_webView->uiDelegate(&ui))) ui->ExternalCall(m_webView, BString(page),BString(action),BString(param)); } =================== 同事需要在UIDelegate增加对应的接口文件,IWebUIDelegate.idl HRESULT ExternalCall([in] IWebView* sender, [in] BSTR page, [in] BSTR action, [in] BSTR param); 编译后,就可以在webkitbroswer增加UIDelegate中增加一个接口实现