ActiveX与JavaScript交互

JavaScript调用ActiveX想必大家都很熟悉,这里就不说了。主要说说ActiveX怎么调用JavaScript吧。

首先把http://269181927.iteye.com/blog/1045372这篇文章中创建好的修改代码。

第一步创建接口

[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);
}

 在控件类中添加方法:

private void btReaset_Click(object sender, EventArgs e)
{
   // WebBrowser wb = new WebBrowser();
    //wb.Document.InvokeScript("say", new string[] { "你好!" });
    CallJavaScript("say('你好!')");
}
 
private void CallJavaScript(string code)
{
    Type typeIOleObject = this.GetType().GetInterface("IOleObject"true);
    object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
    BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
    null,
    this,
    null);
 
    IOleClientSite oleClientSite2 = oleClientSite as IOleClientSite;
    IOleContainer pObj;
    oleClientSite2.GetContainer(out pObj);
 
    //获取页面的Script集合
    IHTMLDocument2 pDoc2 = (IHTMLDocument2)pObj;
    IHTMLWindow2 win2 = (IHTMLWindow2)pDoc2.parentWindow;
 
    win2.execScript(code, "javascript");
    //object script = pDoc2.Script;
 
    //try
    //{
    //    script.GetType().InvokeMember(functionName,
    //    BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
    //    null,
    //    script,
    //    args);
    //}
    //catch { }
}
   

在页面上添加JavaScript方法

function say(msg) {
    alert(msg);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值