这在某种程度上是对这里答案的后续行动.
我有一个自定义ActiveX控件,它引发了一个事件(带有"msg"参数的"ReceiveMessage"),需要在Web浏览器中由Javascript处理.从历史上看,我们已经能够使用以下仅IE语法在不同项目上实现此目的:
function MyControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
但是,当在掩埋控件的布局内部时,Javascript无法找到控件.具体来说,如果我们把它放到一个普通的HTML页面,它工作正常,但如果我们将它放入由<Form>标签包装的ASPX页面,我们会得到一个"MyControl is undefined"错误.我们尝试过以下变体:
var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
...但它会导致Javascript错误"GetControl未定义".
处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中工作感兴趣.这必须是我们正在做的自定义ActiveX控件.
谢谢.
利用几个代码片段,我试图用Javascript事件处理程序挂钩ActiveX对象.我无法确定为什么没有调用事件处理程序.
更新
通过在'onLoad'事件中将javascript调用放到SayHello(),我能够触发ActiveX事件.现在我正在寻找C#调用,以及如何将它挂钩到Javascript使用的ActiveX对象中.
(这也可能依赖于从IE的高级选项中启用本地脚本).
消息继续
<script for="MyObject" event="OnUpdateString(stuff)">
document.write("<p>" + stuff);
document.writeln("</p>");
</script>
Run Code Online (Sandbox Code Playgroud)
利用MSDN文档,我创建了一个WinForms应用程序,其中包含一个WebBrowser控件,该控件充当ObjectForScripting(与问题无关).此容器调用ActiveX事件,但未被Javascript处理.我要在ActiveX交互中包含C#Form代码,并允许它作为ActiveX和/或WebBrowser控件的未来用户的参考.
此文件旨在与新的Windows窗体项目一起使用,其中WebBrowser控件已添加到主窗口.
C#Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ActiveXObjectSpace;
namespace TestActiveX
{
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Form1 : Form
{
MyObject myObject = new MyObject();
public Form1()
{
InitializeComponent();
Text = "ActiveX Test";
Load += new EventHandler(Form1_Load);
}
private …Run Code Online (Sandbox Code Playgroud) 我想在C#中创建一个COM对象,并通过JScript的IDispatch使用它.那部分非常简单.
我还想在COM对象上实现简单的回调,类似于在浏览器中可用的XmlHttpRequest对象公开的事件.该模型允许Javascript附加如下事件处理程序:
var xmlhttp = new ActiveXObject("MSXML.XMLHTTP");
xmlhttp.onReadyStateChange = function() {
...
};
Run Code Online (Sandbox Code Playgroud)
我希望我的客户端JScript代码看起来像这样:
var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) {
...
};
Run Code Online (Sandbox Code Playgroud)
C#代码是什么样的?我想要一般情况 - 我希望能够将参数传递回Javascript fn.
我已经看过如何在点击时用JavaScript编写用C#引发事件的ActiveX控件?,但那里的答案看起来实际上很复杂,而且使用起来很复杂.
从这篇文章中,似乎XMLHttpRequest事件不是COM事件.这onreadystatechange是一种类型的财产IDispatch.当脚本客户端将该属性设置为函数时,JScript将其封送为IDispatch对象.
剩下的唯一问题是从C#调用IDispatch.