js 代码:<input type="button" value="发送消息" onclick="Send();" />
<input type="text" id="txtData" />
<object id="GpsActiveX" classid="clsid:31B11F5C-5B01-4A8C-8119-3710CB1C8ECC">
</object>
<script type="text/javascript" language="javascript">
GpsActiveX.Init(window, '192.168.16.14', '8000');
function ClientTest(t) {
alert(t);
}
function Send() {
GpsActiveX.SendToServer(document.getElementById("txtData").value);
}
</script>
<script language="javascript" event="OnGps(vid,gps)" for="GpsActiveX">
alert(vid);
</script>比如这个 OnGps 怎么在 OCX 抛出来给 JS 获取以上可以调用 OXC 里面的方法,就是事件,在 OCX 里面不知道怎么写,才能让 event 捕获。 c#代码: [Guid("31B11F5C-5B01-4A8C-8119-3710CB1C8ECC")]
public partial class WebGpsServer : UserControl, IObjectSafety
{
mshtml.HTMLWindow2Class html;//执行客户端脚本 string ip = "127.0.0.1";
int port = 8000; private IPAddress serverIP;
private IPEndPoint serverFullAddr;
private Socket sock; public WebGpsServer()
{
InitializeComponent();
} #region IObjectSafety 成员 //............ #endregionpublic void Init(object obj, string ip, int port)
{
html = (mshtml.HTMLWindow2Class)obj; this.ip = ip;
this.port = port;
Start();
}private void Start()
{
serverIP = IPAddress.Parse(ip);
serverFullAddr = new IPEndPoint(serverIP, port);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(serverFullAddr);
Thread t = new Thread(new ThreadStart(ReceiveMsg));
t.Name = "Receive Message";
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 方法
}private void ReceiveMsg()
{
try
{
while (true)
{
byte[] byteRec = new byte[100];
this.sock.Receive(byteRec);
string strRec = System.Text.Encoding.GetEncoding("gb2312").GetString(byteRec);
if (this.label1.InvokeRequired)
{
this.label1.Invoke(new EventHandler(ChangeRtb), new object[] { strRec, EventArgs.Empty });
} // 这里不能使用 html.execScript 这种方法,所以想修改成捕获事件 //异常如下:无法将类型为 mshtml.HTMLWindow2Class 的 COM 对象强制转换为接口类型 mshtml.DispHTMLWindow2 //html.execScript("ClientTest('" + strRec + "');", "javascript");
}
}
catch (Exception ex)
{
MessageBox.Show("Receive Message Error" + ex.Message);
}
}private void ChangeRtb(object obj, EventArgs e)
{
string s = System.Convert.ToString(obj);
label1.Text = s;// 这里不能使用 html.execScript 这种方法,所以想修改成捕获事件//异常信息如下:由于出现错误 80080101 而导致此项操作无法完成
//html.execScript("ClientTest('" + s + "');", "javascript");
}//发送消息给服务器public void SendToServer(string datas)
{
byte[] byteSend = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Dns.GetHostName() + ": " + datas + "\n");
this.sock.Send(byteSend);
}}
<input type="text" id="txtData" />
<object id="GpsActiveX" classid="clsid:31B11F5C-5B01-4A8C-8119-3710CB1C8ECC">
</object>
<script type="text/javascript" language="javascript">
GpsActiveX.Init(window, '192.168.16.14', '8000');
function ClientTest(t) {
alert(t);
}
function Send() {
GpsActiveX.SendToServer(document.getElementById("txtData").value);
}
</script>
<script language="javascript" event="OnGps(vid,gps)" for="GpsActiveX">
alert(vid);
</script>比如这个 OnGps 怎么在 OCX 抛出来给 JS 获取以上可以调用 OXC 里面的方法,就是事件,在 OCX 里面不知道怎么写,才能让 event 捕获。 c#代码: [Guid("31B11F5C-5B01-4A8C-8119-3710CB1C8ECC")]
public partial class WebGpsServer : UserControl, IObjectSafety
{
mshtml.HTMLWindow2Class html;//执行客户端脚本 string ip = "127.0.0.1";
int port = 8000; private IPAddress serverIP;
private IPEndPoint serverFullAddr;
private Socket sock; public WebGpsServer()
{
InitializeComponent();
} #region IObjectSafety 成员 //............ #endregionpublic void Init(object obj, string ip, int port)
{
html = (mshtml.HTMLWindow2Class)obj; this.ip = ip;
this.port = port;
Start();
}private void Start()
{
serverIP = IPAddress.Parse(ip);
serverFullAddr = new IPEndPoint(serverIP, port);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(serverFullAddr);
Thread t = new Thread(new ThreadStart(ReceiveMsg));
t.Name = "Receive Message";
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 方法
}private void ReceiveMsg()
{
try
{
while (true)
{
byte[] byteRec = new byte[100];
this.sock.Receive(byteRec);
string strRec = System.Text.Encoding.GetEncoding("gb2312").GetString(byteRec);
if (this.label1.InvokeRequired)
{
this.label1.Invoke(new EventHandler(ChangeRtb), new object[] { strRec, EventArgs.Empty });
} // 这里不能使用 html.execScript 这种方法,所以想修改成捕获事件 //异常如下:无法将类型为 mshtml.HTMLWindow2Class 的 COM 对象强制转换为接口类型 mshtml.DispHTMLWindow2 //html.execScript("ClientTest('" + strRec + "');", "javascript");
}
}
catch (Exception ex)
{
MessageBox.Show("Receive Message Error" + ex.Message);
}
}private void ChangeRtb(object obj, EventArgs e)
{
string s = System.Convert.ToString(obj);
label1.Text = s;// 这里不能使用 html.execScript 这种方法,所以想修改成捕获事件//异常信息如下:由于出现错误 80080101 而导致此项操作无法完成
//html.execScript("ClientTest('" + s + "');", "javascript");
}//发送消息给服务器public void SendToServer(string datas)
{
byte[] byteSend = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Dns.GetHostName() + ": " + datas + "\n");
this.sock.Send(byteSend);
}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货