Отправка и получение переменной в / из c# и JS с помощью cefsharp - PullRequest
0 голосов
/ 25 февраля 2020

Я новичок в общении с браузером cefsharp, и у меня есть браузер, который загружает мой пользовательский html js и richtextbox.

Мне нужно общаться между ними, когда кто-то вводит что-то в richtextbox, он автоматически отправляет это в качестве переменной в браузер, где мой пользовательский js получит его, и аналогично, если кто-то вводит что-то в мой браузер, функция js отправит ее в c# как переменную, которая обновит richtextbox.

Отправка переменной из js в c# работает с использованием RegisterAsyncJSObject но когда вышеперечисленное работает и обновляет мой richtextbox, и я что-то ввожу в richtextbox, то ExecuteScriptAsyn c не работает, но если я удаляю все, что RegisterAsyncJSObject обновилось в richtextbox и введите что-нибудь в richtextbox, затем ExecuteScriptAsyn c работает

Вот код

Создание объекта AsyncJSObject:

mw = ((MainWindow)System.Windows.Application.Current.MainWindow);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
MainWindowBrowser.RegisterAsyncJsObject("getTEXTfromjs", mw);

JS Код

getHTMLfromjs.updateonDrag(result);

Код объекта AsycnJSO, который обновляет richtextbox:

public void updateonBrowserEnter(String rtbHolder) {
  this.Dispatcher.Invoke(() => {
   richtextbox.Text = rtbHolder;
  });
 }

ExecuteScriptAsyn c Код в Richtextbox TextChanged:

String rtbh = richtextbox.Text;
MainWindowBrowser.ExecuteScriptAsync(String.Format("testFunc('{0}');", rtbh));

1 Ответ

0 голосов
/ 26 февраля 2020

Хорошо, похоже, все работает. Первая проблема, которая была связана с js до c#, была решена с помощью https://github.com/cefsharp/CefSharp/wiki/General-Usage#async - javascript -binding-jsb

Вторая проблема заключалась в том, что связь между c# и js заключалась в том, что когда я выполнял

frame.ExecuteJavaScriptAsync(String.Format("testFunc('{0}')", myvar));

Js, кажется, что он не принимает многострочную строку с одинарными кавычками (''), поэтому в моем случае У меня было два варианта

  • Один преобразовать его в однострочную строку, используя регулярное выражение
  • Два использования ( `) вместо обычных одинарных кавычек, которые будут be

    frame.ExecuteJavaScriptAsyn c (String.Format ("testFun c (` {0} `)", myvar));

и его решен вопрос

...