使用cefsharp在c#和JS之间发送和接收变量
我是全新的cefsharp浏览器通信,我有一个浏览器正在加载我的自定义html js和一个richtextbox 我需要在这两者之间进行通信,如果有人向richtextbox输入内容,它将自动将其作为变量发送到浏览器,我的自定义js将从中获取该内容;同样,如果有人在我的浏览器中输入内容,js函数将其作为变量发送到c#,以更新richtextbox 使用RegisterAsyncJSObject将变量从js发送到c#是可行的,但是当上述操作完成并更新我的richtextbox后,我在richtextbox中输入了一些内容,然后ExecuteScriptAsync就不起作用了,但是如果我删除了RegisterAsyncJSObject在richtextbox并在richtextbox中输入内容,然后执行ScriptAsync工作 这是密码 创建AsyncJSObject:使用cefsharp在c#和JS之间发送和接收变量,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我是全新的cefsharp浏览器通信,我有一个浏览器正在加载我的自定义html js和一个richtextbox 我需要在这两者之间进行通信,如果有人向richtextbox输入内容,它将自动将其作为变量发送到浏览器,我的自定义js将从中获取该内容;同样,如果有人在我的浏览器中输入内容,js函数将其作为变量发送到c#,以更新richtextbox 使用RegisterAsyncJSObject将变量从js发送到c#是可行的,但是当上述操作完成并更新我的richtextbox后,我在richtex
mw = ((MainWindow)System.Windows.Application.Current.MainWindow);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
MainWindowBrowser.RegisterAsyncJsObject("getTEXTfromjs", mw);
public void updateonBrowserEnter(String rtbHolder) {
this.Dispatcher.Invoke(() => {
richtextbox.Text = rtbHolder;
});
}
String rtbh = richtextbox.Text;
MainWindowBrowser.ExecuteScriptAsync(String.Format("testFunc('{0}');", rtbh));
JS代码
getHTMLfromjs.updateonDrag(result);
更新richtextbox的AsycnJSObject代码:
mw = ((MainWindow)System.Windows.Application.Current.MainWindow);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
MainWindowBrowser.RegisterAsyncJsObject("getTEXTfromjs", mw);
public void updateonBrowserEnter(String rtbHolder) {
this.Dispatcher.Invoke(() => {
richtextbox.Text = rtbHolder;
});
}
String rtbh = richtextbox.Text;
MainWindowBrowser.ExecuteScriptAsync(String.Format("testFunc('{0}');", rtbh));
Richtextbox文本上的ExecuteScriptAsync代码已更改:
mw = ((MainWindow)System.Windows.Application.Current.MainWindow);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
MainWindowBrowser.RegisterAsyncJsObject("getTEXTfromjs", mw);
public void updateonBrowserEnter(String rtbHolder) {
this.Dispatcher.Invoke(() => {
richtextbox.Text = rtbHolder;
});
}
String rtbh = richtextbox.Text;
MainWindowBrowser.ExecuteScriptAsync(String.Format("testFunc('{0}');", rtbh));
好的,一切似乎都正常 第一个问题是js到c之间的通信,通过使用 第二个问题是c#to js之间的通信是在我执行
frame.ExecuteJavaScriptAsync(String.Format("testFunc('{0}')", myvar));
Js似乎不接受带单引号(“”)的多行字符串,所以在我的例子中,我有两个选项
- 可以使用正则表达式将其转换为单行字符串
- 双引号使用(`)代替通常的单引号 frame.ExecuteJavaScriptAsync(String.Format(“testFunc(`0}`)”,myvar))
它解决了这个问题您可以使用新的PostMessage功能简化您的代码查看过去不清楚您的问题到底是什么,请重新阅读您的问题并尝试澄清。RegisterAsyncJSObject已被删除,这表明您使用的是旧的过时版本。我只需要发送和接收一些内容(变量)在js和c之间,我无法从你发布的代码中看出多少。当这些方法被调用时,问题就来了。79.1.360是当前支持的版本。应该以异步方式更新UI,否则可能会阻塞线程。