问题描述
js代码:<inputtype="button"value="发送消息"onclick="Send();"/><inputtype="text"id="txtData"/><objectid="GpsActiveX"classid="clsid:31B11F5C-5B01-4A8C-8119-3710CB1C8ECC"></object><scripttype="text/javascript"language="javascript">GpsActiveX.Init(window,'192.168.16.14','8000');functionClientTest(t){alert(t);}functionSend(){GpsActiveX.SendToServer(document.getElementById("txtData").value);}</script><scriptlanguage="javascript"event="OnGps(vid,gps)"for="GpsActiveX">alert(vid);</script>比如这个OnGps怎么在OCX抛出来给JS获取以上可以调用OXC里面的方法,就是事件,在OCX里面不知道怎么写,才能让event捕获。c#代码:[Guid("31B11F5C-5B01-4A8C-8119-3710CB1C8ECC")]publicpartialclassWebGpsServer:UserControl,IObjectSafety{mshtml.HTMLWindow2Classhtml;//执行客户端脚本stringip="127.0.0.1";intport=8000;privateIPAddressserverIP;privateIPEndPointserverFullAddr;privateSocketsock;publicWebGpsServer(){InitializeComponent();}#regionIObjectSafety成员//............#endregionpublicvoidInit(objectobj,stringip,intport){html=(mshtml.HTMLWindow2Class)obj;this.ip=ip;this.port=port;Start();}privatevoidStart(){serverIP=IPAddress.Parse(ip);serverFullAddr=newIPEndPoint(serverIP,port);sock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);sock.Connect(serverFullAddr);Threadt=newThread(newThreadStart(ReceiveMsg));t.Name="ReceiveMessage";t.IsBackground=true;t.Start();byte[]byteSend=System.Text.Encoding.GetEncoding("gb2312").GetBytes("新成员:"+Dns.GetHostName()+"n");try{this.sock.Send(byteSend);}catch{html.execScript("ClientTest('Error');","javascript");}html.execScript("ClientTest('连接成功!');","javascript");//html.execScript这个是执行客户端的JS方法}privatevoidReceiveMsg(){try{while(true){byte[]byteRec=newbyte[100];this.sock.Receive(byteRec);stringstrRec=System.Text.Encoding.GetEncoding("gb2312").GetString(byteRec);if(this.label1.InvokeRequired){this.label1.Invoke(newEventHandler(ChangeRtb),newobject[]{strRec,EventArgs.Empty});}//这里不能使用html.execScript这种方法,所以想修改成捕获事件//异常如下:无法将类型为mshtml.HTMLWindow2Class的COM对象强制转换为接口类型mshtml.DispHTMLWindow2//html.execScript("ClientTest('"+strRec+"');","javascript");}}catch(Exceptionex){MessageBox.Show("ReceiveMessageError"+ex.Message);}}privatevoidChangeRtb(objectobj,EventArgse){strings=System.Convert.ToString(obj);label1.Text=s;//这里不能使用html.execScript这种方法,所以想修改成捕获事件//异常信息如下:由于出现错误80080101而导致此项操作无法完成//html.execScript("ClientTest('"+s+"');","javascript");}//发送消息给服务器publicvoidSendToServer(stringdatas){byte[]byteSend=System.Text.Encoding.GetEncoding("gb2312").GetBytes(Dns.GetHostName()+":"+datas+"n");this.sock.Send(byteSend);}}
解决方案
解决方案二:
这个问题已经困扰3天了,这个是我所有的分了,希望大家能帮小弟解决。一直在线等。
解决方案三:
没有人会吗?还是我描述不清楚啊?
解决方案四:
大家可以出来帮帮忙吗,急死人了。
解决方案五:
我也遇到一样问题郁闷中啊
解决方案六:
终于解决了,研究了3天啊。。
解决方案七:
怎么解决的a