首页 文章

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

提问于
浏览
0

我'm using CefSharp WinForms v43 to allow users to select text on displayed web pages. I need an event everytime 2387482 , so I'使用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

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

    FrameLoadEnd 中的代码更改为:

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

相关问题