Cefsharp 与js交互
C# 部分代码
var setting = new CefSettings();
setting.CefCommandLineArgs.Add("disable-gpu", "1");
if(!Directory.Exists(Application.StartupPath + "\\BrowserCache"))
{
Directory.CreateDirectory(Application.StartupPath + "\\BrowserCache");
}
setting.CachePath = Application.StartupPath+"\\BrowserCache";
Cef.Initialize(setting);
chromeBrowser = new ChromiumWebBrowser("D:/QMDownload/tbl/file/WEBClient/WEBClient/WebClient/bin/x64/Debug/1.htm");
// Add it to the form and fill it to the form window.
chromeBrowser.Anchor = AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom;
chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.SetBounds(-20, 0, chromeBrowser.Location.X, chromeBrowser.Location.Y);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;
//原来的RegisterJsObject显示已经过时了,不能使用了
chromeBrowser.JavascriptObjectRepository.Register("googleBrower", new JsExtention(), isAsync: false, options: BindingOptions.DefaultBinder);
chromeBrowser.KeyboardHandler = new CEFKeyBoardHander();
this.Controls.Add(chromeBrowser);
public class JsExtention
{
public string MessageText = "111111";
public void ShowTest()
{
MessageBox.Show("this in C#.\n\r" + MessageText);
}
}
JS部分代码
<script type="text/javascript">
googleBrower.ShowTest();
</script>
发现js并不能调用到后台的这个方法
是什么原因造成的呢,我们把开发者模式打开
public class CEFKeyBoardHander : IKeyboardHandler
{
public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
{
if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
{
var key = (Keys)windowsKeyCode;
switch (key)
{
case Keys.F12:
browser.ShowDevTools();
break;
case Keys.F5:
if (modifiers == CefEventFlags.ControlDown)
{
//MessageBox.Show("ctrl+f5");
browser.Reload(true); //强制忽略缓存
}
else
{
//MessageBox.Show("f5");
browser.Reload();
}
break;
}
}
return false;
}
public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
{
return false;
}
}
}
发现ShowTest变成了showTest了
将javascript修改为
<script type="text/javascript">
googleBrower.ShowTest();
</script>
成功调用