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

Javascript 如何在用户选择文本时获取事件,javascript,c#,chromium,cefsharp,Javascript,C#,Chromium,Cefsharp,我正在使用WinForms v43允许用户在显示的网页上选择文本。每次选择文本时,我都需要一个事件,因此我使用JS连接onmouseup事件,并尝试将所选文本作为返回值从JS传递给C。但每次我在网页上选择某个内容时,浏览器都会挂起UI线程。如果省略arg,则会触发事件。有没有办法让CefSharp在传递arg时从JS调用C方法 我这样做是为了init: browser = new ChromiumWebBrowser("www.google.com""); browser.RegisterJsO

我正在使用WinForms v43允许用户在显示的网页上选择文本。每次选择文本时,我都需要一个事件,因此我使用JS连接onmouseup事件,并尝试将所选文本作为返回值从JS传递给C。但每次我在网页上选择某个内容时,浏览器都会挂起UI线程。如果省略arg,则会触发事件。有没有办法让CefSharp在传递arg时从JS调用C方法

我这样做是为了init:

browser = new ChromiumWebBrowser("www.google.com"");
browser.RegisterJsObject("jsObject", this, false);
我在FrameLoadEnd上执行此操作:

因此,当用户选择页面上的某些文本时,此方法应触发:

 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只能将原语值封送为参数。确保您的选择是一个字符串,并且应该触发事件。对我有用

将FrameLoadEnd中的代码更改为:

browser.RegisterJsObjectjsObject,this,false;生成编译器错误:无法从“bool”转换为“CefSharp.BindingOptions”。
 browser.ExecuteScriptAsync(@"
     document.body.onmouseup = function(){
         jsObject.OnSelected('hello world')
     }
 ");
 browser.ExecuteScriptAsync(@"
     document.body.onmouseup = function(){
         jsObject.OnSelected(window.getSelection().toString())
     }
 ");