I'm just learning C# WPF and has been successfully implemented CefSharp, how to call .NET function from javascript, that is loaded in CefSharp?
Due to Chromium
changes starting with 63.0.0
there are major changes Javascript Binding
. The legacy behavior still works for Single Page Applications
and where only a single domain is used.
The new binding method has many advantages:
Simple example:
public class BoundObject {
public void showMessage(string msg) {
MessageBox.Show(msg);
}
}
browser.JavascriptObjectRepository.Register("boundAsync", new BoundObject(), true);
<script type="text/javascript">
(async function() {
await CefSharp.BindObjectAsync("boundAsync", "bound");
boundAsync.showMessage('Message from JS');
})();
</script>
For more details visit Javascript Binding v2 #2246 and How do you expose a .NET class to JavaScript?
If you perform cross-site navigation's you will no longer be able to use this method to bind objects.
You need to set CefSharpSettings.LegacyJavascriptBindingEnabled = true
before you register your first object (RegisterAsyncJsObject
).
Simple example:
public class BoundObject {
public void showMessage(string msg) {
MessageBox.Show(msg);
}
}
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
browser.RegisterAsyncJsObject("boundAsync", new BoundAsyncObject());
<script type="text/javascript">
boundAsync.showMessage('Message from JS');
</script>
For more details visit Javascript Binding v2 #2246 and How do you expose a .NET class to JavaScript?