private void CallJavaScript(string callFunctionName, params object[] args) { try { 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); IHTMLDocument pDoc2 = (IHTMLDocument)pObj; object script = pDoc2.Script; try { script.GetType().InvokeMember(callFunctionName, BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, script, args); } catch { LogException(new Exception("1.未实现JS方法:" + callFunctionName + ";2.在调用该方法时发生内部错误")); } } catch { } }
/// <summary> /// 获取JS变量值 /// </summary> /// <param name="varName"></param> /// <returns></returns> protected object GetJSvar(string varName) { if (typeIOleObject == null) { typeIOleObject = this.GetType().GetInterface("IOleObject", true); object tmpOldClientSite = typeIOleObject.InvokeMember("GetClientSite", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, this, null); oleClientSite = tmpOldClientSite as IOleClientSite; oleClientSite.GetContainer(out pObj); } //获取页面的Script集合 IHTMLDocument pDoc2 = (IHTMLDocument)pObj; object script = pDoc2.Script; try { return(script.GetType().InvokeMember(varName, BindingFlags.GetProperty, null, script, new object[] {})); } catch { return(null); } }
/// <summary> /// 调用JS函数 /// </summary> /// <param name="fnName">js函数名</param> /// <param name="args">入参</param> protected void CallJSFun(string fnName, params object[] args) { if (typeIOleObject == null) { typeIOleObject = this.GetType().GetInterface("IOleObject", true); object tmpOldClientSite = typeIOleObject.InvokeMember("GetClientSite", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, this, null); oleClientSite = tmpOldClientSite as IOleClientSite; oleClientSite.GetContainer(out pObj); } //获取页面的Script集合 IHTMLDocument pDoc2 = (IHTMLDocument)pObj; object script = pDoc2.Script; try { //调用JavaScript方法OnScaned并传递参数,因为此方法可能并没有在页面中实现,所以要进行异常处理 script.GetType().InvokeMember(fnName, BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, script, args); } catch { } }
/// <summary> /// 调用JS函数 /// </summary> /// <param name="fnName">js函数名</param> /// <param name="args">入参</param> protected void CallJS(string fnName, params object[] args) { if (typeIOleObject == null) { typeIOleObject = this.GetType().GetInterface("IOleObject", true); object tmpOldClientSite = typeIOleObject.InvokeMember("GetClientSite", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, this, null); oleClientSite = tmpOldClientSite as IOleClientSite; oleClientSite.GetContainer(out pObj); } //获取页面的Script集合 IHTMLDocument pDoc2 = (IHTMLDocument)pObj; object script = pDoc2.Script; try { //调用JavaScript方法OnScaned并传递参数,因为此方法可能并没有在页面中实现,所以要进行异常处理 script.GetType().InvokeMember(fnName, BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, script, args); } catch { } }
public int GetContainer(out IntPtr ppContainer) { Debug.Print("IOleClientSite.GetContainer"); return(_baseIOleClientSite.GetContainer(out ppContainer)); }