我'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 回答
AFAIK,CefSharp只能将原始值编组为args . 确保您的选择是一个字符串,事件应该触发 . 适合我 .
将
FrameLoadEnd
中的代码更改为: