用户在 CefSharp 中选择文本时如何获取事件

How to get an event when the user selects text in CefSharp

我使用 CefSharp WinForms v43 允许用户在显示的网页上 select 文本。我每次 "text is selected" 都需要一个事件,所以我使用 JS 挂钩 onmouseup 事件并尝试将 selected 文本作为 return 值从 JS 传递到 C# .但是每次我在网页上 select 浏览器挂断 UI 线程。如果我省略 arg,事件就会触发。有没有办法让 CefSharp 在传递 arg 时从 JS 调用 C# 方法?

我这样做是为了初始化:

browser = new ChromiumWebBrowser("www.google.com"");
browser.RegisterJsObject("jsObject", this, false);

我在 FrameLoadEnd 上这样做:

 browser.ExecuteScriptAsync(@"
     document.body.onmouseup = function(){
         jsObject.OnSelected(window.getSelection())
     }
 ");

因此,当用户 select 在页面上输入一些文本时,应该触发此方法:

 public void OnSelected(string selected){
     MessageBox.Show("The user selected some text [" + selected + "]");
 }

奇怪的是,当我尝试使用文字值时,我的 C# 处理程序会触发。

 browser.ExecuteScriptAsync(@"
     document.body.onmouseup = function(){
         jsObject.OnSelected('hello world')
     }
 ");

据我所知,CefSharp 只能将原始值编组为 args。确保您的选择是一个字符串,并且应该触发该事件。适合我。

FrameLoadEnd 中的代码更改为:

 browser.ExecuteScriptAsync(@"
     document.body.onmouseup = function(){
         jsObject.OnSelected(window.getSelection().toString())
     }
 ");