Call.Net из javascript в CefSharp 1-wpf

Я только изучаю C# WPF и был успешно реализован CefSharp, как вызвать функцию .NET из javascript, которая загружается в CefSharp?

3 ответов


  1. построить WebView через WebView webView = новый WebView (url)
  2. затем вы можете вызвать метод RegisterJsObject для регистрации объекта js.
  3. используйте javascript для вызова этого объекта js.

пример, как показано ниже:

public class CallbackObjectForJs{
    public void showMessage(string msg){//Read Note
        MessageBox.Show(msg);
    }
}

WebView webView = new WebView("http://localhost:8080");
webView.RegisterJsObject("callbackObj", new CallbackObjectForJs());

код javascript на интерфейсе:

<script type="text/javascript">
    callbackObj.showMessage('message from js');
</script >

Примечание: первый символ не может быть выше метода showMessage в CallbackObjectForJs


из-за Chromium изменения начинаются с 63.0.0 есть серьезные изменения Javascript Binding. Поведение legacy по-прежнему работает для Single Page Applications и где используется только один домен.

Новый Метод Привязки

новый метод привязки имеет много преимуществ:

  • связывать и развязывать объекты по имени
  • привязать подмножество объектов к различным страницам (включая всплывающие окна)
  • удалить / отменить метод
  • разрешить связаны объект динамически

простой пример:

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>

для получения более подробной информации посетите Javascript Binding v2 #2246 и как вы подвергаете класс .NET JavaScript?

Наследие Привязки

если вы выполняете межсайтовую навигацию, вы больше не сможете использовать этот метод для привязки объектов.

необходимо указать CefSharpSettings.LegacyJavascriptBindingEnabled = true прежде чем зарегистрировать ваш первый объект (RegisterAsyncJsObject).

простой пример:

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>

для получения более подробной информации посетите Javascript Binding v2 #2246 и как вы подвергаете класс .NET JavaScript?


сначала создайте публичный класс В C#, как показано ниже :

public class cShaarp_Js
{
public void calledFromJs(Object object){}
}

и затем вы должны зарегистрировать этот класс в ваш chromeBrowser.

chromeBrowser = new ChromiumWebBrowser("file:///C:/sample.html");
chromeBrowser.RegisterJsObject("csharp", new cShaarp_Js);

Теперь мы закончили с C#. с другой стороны, в javascript вы можете создать обратный вызов этого класса, как показано ниже:

function cSharpMetodCall(){csharp.calledFromJs(object);}