c#Activex控件中调用JavaScript
来源:互联网 发布:网络歌手伤感歌曲大全 编辑:程序博客网 时间:2024/05/23 11:27
1.引用Microsoft.mshtml
Microsoft.mshtml的路径是C:/Program Files/Microsoft.NET/Primary Interop Assemblies/Microsoft.mshtml.dll,添加引用后在ActiveX对应类中编写:
- <strong>using</strong> mshtml;
2.用c#实现两个COM类,IOleClientSite和IOleContainer
- <strong><textarea cols="50" rows="15" name="code" class="c-sharp">using System.Runtime.InteropServices;
- [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,
- [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);
- }</textarea> </strong>
3.调用JavaScript方法
在Activex控件的对应类中就可以编写如下的CallJavaScript方法:
- <strong><textarea cols="50" rows="15" name="code" class="c-sharp">private void CallJavaScript(string Filenames)
- {
- 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);
- //参数数组
- object[] args = new object[1];
- args[0] = Filenames;
- //获取页面的Script集合
- IHTMLDocument pDoc2 = (IHTMLDocument) pObj;
- object script = pDoc2.Script;
- try
- {
- //调用JavaScript方法OnScaned并传递参数,因为此方法可能并没有在页面中实现,所以要进行异常处理
- script.GetType().InvokeMember("OnScaned",
- BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
- null,
- script,
- args);
- }
- catch { }
- }</textarea> </strong>
4.在页面中实现相应的JavaScript方法
在包含这个ActiveX控件的页面中添加如下的JavaScript方法:
- <strong><textarea cols="50" rows="15" name="code" class="javascript"><mce:script type="text/javascript"><!--
- function OnScaned(files)
- {
- if (files)
- {
- //do something
- }
- }
- // --></mce:script></textarea> </strong>
这样,在ActiveX控件中调用CallJavaScript方法时,最终就会调用到页面中的OnScaned方法,藉此实现了ActiveX的“事件”机制。
0 0
- c#Activex控件中调用JavaScript
- C# ActiveX控件中调用JavaScript方法
- c# ActiveX控件中调用javaScript方法
- JavaScript调用ActiveX控件
- ActiveX中调用JavaScript
- [C#]ActiveX控件调用页面上的JavaScript
- JavaScript中调用C# ActiveX控件中的方法
- activex控件中调用html页面中的javascript
- javascript调用c++写的ActiveX控件
- ActiveX控件调用网页JavaScript中的函数
- ActiveX控件调用JavaScript函数的方法
- C#中对ActiveX控件的调用
- 在html中调用ActiveX控件
- C#中对ActiveX控件的调用
- C#中对ActiveX控件的调用
- IE10中activex控件调用js脚本
- 如何在JavaScript中调用MFC的ActiveX控件的方法
- [小结]Javascript中绑定ActiveX控件事件
- CSS中从大图中扣取小图的完整教程(background-position应用)
- Oracle over()分析函数实现累加
- POJ 1251 Jungle Roads(最小生成树)
- 学习HTML,网页框架Frameset
- ios8远程推送
- c#Activex控件中调用JavaScript
- 用tolua++工具调用cpp(图文教程)
- NSString 与 NSData相互转化
- PHP时间戳与Javascript时间戳相互转换的问题
- java正则解析读取csv文件
- HDU1003 Max Sum
- 浅谈HTTP routing
- Linux 编译的四个阶段
- 通往阿里之路