笨狐狸

好奇心是驱使我看世界的第一要素

用mshtml获得Javascript中function的返回值

   今天琢磨了一下如何用mshtml获得Javascript中function的返回值。我们以前都是用没mshtml.IHTMLWindow2接口的execScript方法来执行HTML文档中的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方法来实现:

 

 

    要注意的是,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的代码如下:

 

 

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


转自http://www.cnblogs.com/waxdoll/archive/2007/06/30/271018.html,原文带有那篇英文原文附件,一定要看啊

阅读更多
个人分类: c#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭