winfrom内嵌浏览器----火狐内核--网站中点击事件没反应,BS/CS交互报COM组件调用错误问题 的看过来

一. 点击事件没反应

 

前两天老大安排我做winfrom里内嵌浏览器控件,一开始我准备用自带的IE的Webbrowser,和谷歌的webKit内核

然后自己试了一下,由于网站的限制,我IE和谷歌的CSS效果没那么好,后来还是选择了火狐

 

由于网站是使用的EXT框架,里面的所有按钮都点击不了,但是原生的html按钮的onclick和jq的$(“#id”).on('click',function(){  }) 这样就可以实现点击,EXT的点击事件是handler或listen{'click':function(){}} 这样的绑定的事件,不能实现点击事件,当时一度没思路,在网上找不到解决方案快要放弃

后来灵机一动,自己干脆写了个demo,测试下jq框架下的元素和ext框架下元素有什么不同的地方

如图:这是在浏览器下测试的两个按钮绑定的监听事件列表

 

 

Jq下的h5按钮只有一个click,ext有很多监听事件,我调试的结果是ext点击按钮的时候进了touchstart,这个我不知道为什么

然后我再在winfrom里面运行了这两个网站

如图:

 

 

这里可以看到在winfrom框架里面touch事件全是undefined,这我就知道是怎么回事了,我们来看下ext-all的源码,在源码的2W多行的位置,有这么个判断

如图:

 

EXT.WebKit,我调试了一下,在winfrom的浏览器里面,这个地方是false,所以没有绑定事件,原因就是在这里

解决方案一 就是手动把Ext.WebKit的值改成true,这个地方不会对其他的地方造成影响,暂时没发现对别的地方有什么影响

解决方案二 就是用geckoWebBrowser 45.0版本的      这个我也测了,不用改源码就可以,但是我目前是用的geckoWebBrowser 33.0版本的

 

 

二.C#调js方法,js调C#方法  Com组件调用错误的解决方案

 js调C#方法可以调用geckoWebBrowser控件里的DomClick事件,这个事件有个参数e,e就是点击的元素  element

C#调js方法或对象这个会影响Com组件调用错误

var executor = new Gecko.JQuery.JQueryExecutor(geckoWebBrowser1.Window);  //先获取到jquery对象
                var c = executor.ExecuteJQuery("json").ToObject();//取到js中名为json的全局变量

这个地方如果报Com组件错误,原因可能如下

1.本地DTC服务没开,或者DTC的出入站规则限制,我设置的是允许出入站,不需要验证

2.防火墙的出入站设置,我也设置的允许

 

我这样设置之后,然后重启一下机器重现调试,就可以在CS端获取到BS端的对象变量和方法了

在CS调js的方法如下

    var js = "test1(1)";//调js中的test1传个参数
            geckoWebBrowser1.Navigate(string.Format("javascript:void({0})", js));

 

就可以了,完美~

 

一方面给做相关事情的程序员提点方向,因为网上这方面的资料实在太少了,基本上可以说没有

第二个是给自己做个笔记,别让以后给忘了

祝各位大佬们编码顺利

 

 

 

 

 

原文地址:https://www.cnblogs.com/caoq/p/7810445.html