Call.Net из javascript в CefSharp 1-wpf
Я только изучаю C# WPF и был успешно реализован CefSharp, как вызвать функцию .NET из javascript, которая загружается в CefSharp?
3 ответов
- построить WebView через WebView webView = новый WebView (url)
- затем вы можете вызвать метод RegisterJsObject для регистрации объекта js.
- используйте 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);}