如何用mshtml获得Javascript中function的返回值

转载 2012年10月10日 11:24:05

今天琢磨了一下如何用mshtml获得Javascript中function的返回值。我们以前都是用没mshtml.IHTMLWindow2接口的execScript方法来执行HTML文档中的javascript代码段,如

 

//awbMain为AxSHDocVw.AxWebBrowser控件
mshtml.IHTMLDocument2 doc = this.awbMain.Document;
private mshtml.IHTMLWindow2 win = doc.parentWindow;
string strScript = "alert('OK');";
win.execScript(strScript, "javascript");
 

    智能提示显示execScript方法的返回值类型是object,但是其实其返回值永远是null(当然,我们不应该相信COM的智能提示,很多参数、返回值等都是object类型,无法得到更详细的信息),即使该方法执行的是一个有返回值javascript函数。

    那么,这个问题如何解决呢?Google一下吧。简体中文的页面中没有这个问题的答案,看看英文的文档吧(这里说一句,很多人因为懒或者不会使用google等搜索引擎而错过了学习一些东西的机会。多用一下搜索引擎,考虑怎样使用关键词,并不断提高关键字的质量,相信很容易找到相应的资料)。输入“"javascript return value" +mshtml +c#”作为关键字,搜索结果只有一篇文档,要的就是它。这篇文档详细描述了如何在.NET应用程序中控制Internet Explorer,示例既有C#也有VB.NET,既有1.0也有2.0,非常棒(附在随笔的最后)。

    文档中给出了这个问题的解决方法,不过是.NET 2.0中的解决方法。.NET 2.0中的解决方法是利用HtmlDocument类的InvokeScript方法来实现:

 

string strRetVal = "";
//awbMain为System.Windows.Forms.WebBrowser控件
HtmlDocument doc = this.awbMain.Document;
//jsFunction为HTML文档中javascript函数的函数名
strRetVal = (string)doc.InvokeScript("jsFunction");
System.Windows.Forms.MessageBox.Show(strRetVal);
 

    要注意的是,HTML文档中的javascript函数名后要加空括号(没有参数的情况下),而在C# 2.0中调用之则不用加空括号。

    在C# 1.x中使用mshtml如何解决这个问题呢,这里介绍一个变通的方法(这些变通的方法在以前的随笔中也用到过):
        1、在Form中定义变量用于存储javascript函数的返回值;
        2、使用.NET 1.x中的InteropServices把应用程序的Form对象传入到HTML DOM中;
        3、在javascript函数中为1中的变量赋值(赋和javascript函数返回值一样的值),这样javascript函数甚至不需要有返回值了。

    步骤2的代码如下:

 

private System.Runtime.InteropServices.Expando.IExpando iex;
private mshtml.IHTMLDocument2 doc = null;
//awbMain为AxSHDocVw.AxWebBrowser控件,wendang加载完毕后执行的代码
private void awbMain_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
 this.doc = (mshtml.IHTMLDocument2)this.awbMain.Document;
 ex = (System.Runtime.InteropServices.Expando.IExpando)doc;
 System.Reflection.PropertyInfo piform = ex.AddProperty("MainForm");
 piform.SetValue(doc, this, null);
}


 

    这样在步骤3的HTML文档的javascript函数中就可以用document.MainForm来指代Windows应用程序中的Form了。


转载:http://blog.csdn.net/cui55/article/details/884506

参考:http://www.cnblogs.com/waxdoll/articles/271018.html


如何用mshtml获得Javascript中function的返回值[mshtml]

今天琢磨了一下如何用mshtml获得Javascript中function的返回值。我们以前都是用没mshtml.IHTMLWindow2接口的execScript方法来执行HTML文档中的javas...
  • jxufewbt
  • jxufewbt
  • 2007年09月11日 20:59
  • 5139

用mshtml获得Javascript中function的返回值

今天琢磨了一下如何用mshtml获得Javascript中function的返回值。我们以前都是用没mshtml.IHTMLWindow2接口的execScript方法来执行HTML文档中的javas...
  • liweisnake
  • liweisnake
  • 2012年05月09日 08:49
  • 1090

js中函数可以作为参数和返回值

js中函数可以作为参数和返回值,来看看下面的排序 function Student(name, height, weight) { this.n...
  • k491022087
  • k491022087
  • 2017年01月15日 22:50
  • 1439

JavaScript函数-带参数的函数、带返回值的参数

之前说完函数的定义以及调用,接下来看看带参数的函数以及带返回值的的函数~\(≧▽≦)/~   带参数的函数   之前讲了函数的基本用法,接下来看看带参数的函数。   在函数中,参数可以无限多,函数...
  • jiongyixuan
  • jiongyixuan
  • 2015年12月12日 14:15
  • 18875

使用MSHTML解析HTML代码

从国外站点转过来的:C++版本:I have a lot ofexperience in programming low-level MSHTML and I always see questions...
  • suiyunonghen
  • suiyunonghen
  • 2009年12月06日 21:53
  • 6467

Function-In-JavaScript 方法

概述函数就是一段预先设置的代码块,可以反复调用,根据输入参数的不同,返回不同的值。JavaScript有三种方法,可以声明一个函数。函数的声明(1)function命令function命令声明的代码区...
  • u010287117
  • u010287117
  • 2016年04月07日 22:43
  • 360

关于在jsp页面通过javascript返回参数的方法

在写JSP页面的时候,我们经常要能过一个相当于对话框的页面里面选择我需要的一些选项,如发邮件的用户名,企业通讯录中的部门,等等其它信息。先做一个查询页面程序段中的变只要不是在这里定义的,那一定是通过程...
  • aptweasel
  • aptweasel
  • 2007年06月12日 17:21
  • 2125

转载——读《技巧:如何用一年时间获得十年的经验》

转载自:http://www.codepub.cn/2016/12/30/Read-skills-how-to-get-a-decade-of-experience-in-a-year/ ...
  • hpp1314520
  • hpp1314520
  • 2017年06月16日 11:21
  • 585

javascript方法返回值

function getBack(){ var data=""; $.ajax({ type:'post' , //请求方式 url:'UserActionM...
  • mym43210
  • mym43210
  • 2015年03月13日 09:38
  • 1369

JavaScript基础——引用类型(三)Function类型

在ECMAScript中函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定...
  • Goskalrie
  • Goskalrie
  • 2016年05月30日 17:27
  • 3292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何用mshtml获得Javascript中function的返回值
举报原因:
原因补充:

(最多只允许输入30个字)