最近研究了用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中增加一个接口实现