c# - 如何从ActiveX或DLL调用Javascript函数

标签 c# javascript html activex

我发现了类似的问题how to call java script function from activex or dll in c#但这并不能为我提供解决方案
http://msdn.microsoft.com/en-us/library/ms171712.aspx
从托管在Internet Explorer中的用户控件访问DOM
创建用户控件类的自定义派生类。有关详细信息,请参见如何:编写复合控件。
将以下代码放入用户控件的加载事件处理程序中:

    HtmlDocument doc = null;

    private void UserControl1_Load(object sender, EventArgs e)
    {
        if (this.Site != null)
        {
            doc = (HtmlDocument)this.Site.GetService(typeof(HtmlDocument));
        }
    }

很遗憾,我仍然无法在类中获取DOM对象。我已尝试查看在这个站点中获取的内容,因此我将其放在了一个消息框中
   MessageBox.Show(this.Site.ToString());

我觉得很奇怪
System.Windows.Forms.Control+AxSourcingSite

请帮帮我。。

最佳答案

下面是一个从active x调用js函数的示例:

Type typeIOleObject = "activity control object".GetType().GetInterface("IOleObject", true);  
            object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",  
            BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,  
            null,  
            control,  
            null);  

            IOleClientSite oleClientSiteoleClientSite2 = oleClientSite as IOleClientSite;  
            IOleContainer pObj;  
            oleClientSite2.GetContainer(out pObj);  

            //get Script set from page  
            IHTMLDocument2 pDoc2 = (IHTMLDocument2)pObj;  
            IHTMLWindow2 win2 = (IHTMLWindow2)pDoc2.parentWindow;  
             //string code="";
            win2.execScript(code, "javascript");  
            if (returnType == null)  
      [ComImport, Guid("00000118-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]  
    public interface IOleClientSite  
    {  
        void SaveObject();  
        void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);  
        void GetContainer(out IOleContainer ppContainer);  
        void ShowObject();  
        void OnShowWindow(bool fShow);  
        void RequestNewObjectLayout();  
    }  
      [ComImport, Guid("0000011B-0000-0000-C000-000000000046"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]  
    public interface IOleContainer  
    {  
        void EnumObjects([In, MarshalAs(UnmanagedType.U4)] int grfFlags,  
        [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppenum);  
        void ParseDisplayName([In, MarshalAs(UnmanagedType.Interface)] object pbc,  
        [In, MarshalAs(UnmanagedType.BStr)] string pszDisplayName,  
        [Out, MarshalAs(UnmanagedType.LPArray)] int[] pchEaten,  
        [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);  
        void LockContainer([In, MarshalAs(UnmanagedType.I4)] int fLock);  
    }  

关于c# - 如何从ActiveX或DLL调用Javascript函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816749/

相关文章:

c# - NodaTime 的 Instant.Now

c# - 是否可以将复杂类型属性绑定(bind)到数据网格?

javascript - 您可以在一个页面中为 javascript 设置一个变量并加载另一个页面并且仍然让它识别该变量吗?

javascript - 移相器 : Cannot Access Variable Defined in Other Scope

javascript - 显示事件不适用于 Bootstrap Collapse

c# - 为什么此后台线程中未处理的异常不会终止我的进程?

c# - 如何在 SharpSVN 中获取已更改文件的列表(如 svn diff --summarize --xml)

javascript - .Net WebSocket 原型(prototype)...在 Javascript 中打开连接时遇到问题

javascript - 如何检查 contenteditable 插入符号是否在 { } 内

javascript - 如何正确加载导航栏和页面内容?