cefsharp 63 到 84.4.10 如何在js中升级总是不执行,处理办法

当你从低版本升级高版本

cefsharp 63 到 84.4.10 如何在js中升级总是不执行,处理办法_第1张图片

 老板本C#是这样写的


  browser.RegisterJsObject("CyberWin_JsStandardPlug_Dialog", new CyberWin_JsStandardPlug_JsDialog());

软件这样提示

.Exception: CefSharpSettings.LegacyJavascriptBindingEnabled is currently false,
                                    for legacy binding you must set CefSharpSettings.LegacyJavascriptBindingEnabled = true
                                    before registering your first object see https://github.com/cefsharp/CefSharp/issues/2246
                                    for details on the new binding options. If you perform cross-site navigations bound objects will
                                    no longer be registered and you will have to migrate to the new method.
   在 CefSharp.WinForms.ChromiumWebBrowser.RegisterJsObject(String name, Object objectToBind, BindingOptions options)

于是乎你这样操作,官方就是这样说的

  CefSharpSettings.LegacyJavascriptBindingEnabled = true;
            CefSharpSettings.WcfEnabled = true;

但是软件直接空白,好不容易打开,但是根本不执行


从理论上这时候可以执行了,怎么执行呢

记住在网页 javascript 中药这样写

首先在创建了ChromiumWebBrowser实例之后,要注册对象,这一步和之前没什么大的变化,只是注册方法改了一下。但是如果你以为这样注册一下就能和之前一样使用那你就太天真了。
现在你注册之后,要想在js中使用CyberWin_JsStandardPlug_Dialog中的方法,在使用之前你需要这样:

这官方也太坑了,总不能每次都加这样一行吧。

网上有人说加载,网页加载完成,但其实不行

  private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {

          
  browser.GetFocusedFrame().EvaluateScriptAsync("CefSharp.BindObjectAsync('CyberWin_JsStandardPlug')");
 


        }

你知道为啥不行吗?

因为在零售行业和自助设备中,网页加载时候我们就要调用人工只能,所以

也有人说加成代码

 public void OnFrameLoadEnd(IWebBrowser browserControl, FrameLoadEndEventArgs frameLoadEndArgs)
        {
            try
            {
         
                    String js = "var v = document.createElement('script');v.src='"+ scriptbodyurl + "';document.body.appendChild(v);";
                    browserControl.ExecuteScriptAsync(js);
                }

            }catch(Exception EX)
            {

            }
  


        }

其实这个方法更不行,因为嵌入代码,会导致json和其他页面返回数据时候失真。

所以,要具备合理性就得放在开头,而却不能是代码,只能是执行命令。

  public void OnFrameLoadStart(IWebBrowser browserControl, FrameLoadStartEventArgs frameLoadStartArgs)
        {
            // throw new NotImplementedException();



            browserControl.ExecuteScriptAsync("CefSharp.BindObjectAsync('CyberWin_JsStandardPlug');");//未来之窗AIOT人工智能

        }

至此才完美

你可能感兴趣的:(windows,内核,打印插件,编程,html5,浏览器开发,CefSharp)