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

时间:2015-10-23 12:33:16

标签: javascript c# chromium cefsharp

我正在使用CefSharp WinForms v43来允许用户在显示的网页上选择文本。每次“文本被选中”时我都需要一个事件,因此我使用JS来挂钩onmouseup事件并尝试将所选文本作为JS的返回值传递给C#。但每次我在网页上选择一些内容时,浏览器都会挂起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())
     }
 ");

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

FrameLoadEnd中的代码更改为:

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