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