我正在使用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')
}
");
答案 0 :(得分:0)
AFAIK,CefSharp只能将原始值编组为args。确保您的选择是一个字符串,事件应该触发。适合我。
将FrameLoadEnd
中的代码更改为:
browser.ExecuteScriptAsync(@"
document.body.onmouseup = function(){
jsObject.OnSelected(window.getSelection().toString())
}
");