Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cefsharp在c#和JS之间发送和接收变量_C#_Wpf_Cefsharp - Fatal编程技术网

使用cefsharp在c#和JS之间发送和接收变量

使用cefsharp在c#和JS之间发送和接收变量,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我是全新的cefsharp浏览器通信,我有一个浏览器正在加载我的自定义html js和一个richtextbox 我需要在这两者之间进行通信,如果有人向richtextbox输入内容,它将自动将其作为变量发送到浏览器,我的自定义js将从中获取该内容;同样,如果有人在我的浏览器中输入内容,js函数将其作为变量发送到c#,以更新richtextbox 使用RegisterAsyncJSObject将变量从js发送到c#是可行的,但是当上述操作完成并更新我的richtextbox后,我在richtex

我是全新的cefsharp浏览器通信,我有一个浏览器正在加载我的自定义html js和一个richtextbox

我需要在这两者之间进行通信,如果有人向richtextbox输入内容,它将自动将其作为变量发送到浏览器,我的自定义js将从中获取该内容;同样,如果有人在我的浏览器中输入内容,js函数将其作为变量发送到c#,以更新richtextbox

使用RegisterAsyncJSObject将变量从js发送到c#是可行的,但是当上述操作完成并更新我的richtextbox后,我在richtextbox中输入了一些内容,然后ExecuteScriptAsync就不起作用了,但是如果我删除了RegisterAsyncJSObject在richtextbox并在richtextbox中输入内容,然后执行ScriptAsync工作

这是密码

创建AsyncJSObject:

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,否则可能会阻塞线程。