Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call .Net from javascript in CefSharp 1 - wpf

I'm just learning C# WPF and has been successfully implemented CefSharp, how to call .NET function from javascript, that is loaded in CefSharp?

like image 286
user3595714 Avatar asked May 02 '14 09:05

user3595714


1 Answers

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.

New Binding Method

The new binding method has many advantages:

  • Bind and unbind objects by name
  • Bind a subset of objects to different pages (including popups)
  • Delete/unbind a method
  • Resolve a bound object dynamically

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?

Legacy Binding

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?

like image 190
Oleg Markelov Avatar answered Oct 12 '22 05:10

Oleg Markelov