none
如何在Winform下读取脚本中的变量并转换成数组或ArrayList RRS feed

  • 问题

  • VS2005下,用Webbrowser加载一个网页,网页中的脚本片断如下:
    <SCRIPT LANGUAGE=javascript>
    ...
    var Server = new ChatServer() ;
    Server.Add("内容1","a");
    Server.Add("内容2","b");
    Server.Add("内容3","c");
    ...
    脚本中的变量类似C#中的数组.我的目的,是想得到变量Server并将其转换成ArrayList或数组.
    用mshtml.IHTMLDocument2试途读取并转换.如下:
    mshtml.IHTMLDocument2 doc = this.webBrowser1.Document.DomDocument as IHTMLDocument2;
                mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;
                            System.Collections.ArrayList alist =(System.Collections.ArrayList) win.GetType().InvokeMember("Server", BindingFlags.GetProperty, null, win, new object[] { });
    错误信息如下:
    无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“System.Collections.ArrayList”。表示 COM 组件的类型实例不能强制转换为不表示 COM 组件的类型;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。

    请问如何解决?谢谢

    • 已移动 Sheng Jiang 蒋晟 2009年8月25日 16:38 IE API问题 (发件人:Visual C#)
    2009年8月25日 3:00

答案

  • 用  document.scripts  可以把所有的script block 读出来  找到你要分析的部分  用  string.split 分成数组
    恭喜自己5星用户达成
    2009年8月25日 4:22
  • 请尝试使用 string[] 数组。因为 ArrayList 不是 COM 基类型 (也不能兼容 COM 类型转换)。利用如上的 DOM 方法可能可以解决此问题。
    Mark Zhou
    2009年8月25日 4:50
  • 全局变量和函数可以通过IHTMLDocument.Script的同名属性和方法访问

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月25日 16:38

全部回复

  • 你好,较简单的做法是,你可以把 Server 的内容构造一个有规律的字符串存入到 Hidden 控件中,然后通过 WebBrowser 控件得到 Hidden 解释字符串得到 ArrayList
    知识改变命运,奋斗成就人生!
    2009年8月25日 3:12
    版主
  • 谢谢.不过Webbrowser加载的网页,是别的网站的网页,我无权添加HIDEN控件.还有没有别的办法.读变量没问题,只是在转换时发错错误.大概是因为COM是非托管而C#是托管.转换时需要些什么东西.
    劳驾大家再给看看吧
    2009年8月25日 3:27
  • 用  document.scripts  可以把所有的script block 读出来  找到你要分析的部分  用  string.split 分成数组
    恭喜自己5星用户达成
    2009年8月25日 4:22
  • 请尝试使用 string[] 数组。因为 ArrayList 不是 COM 基类型 (也不能兼容 COM 类型转换)。利用如上的 DOM 方法可能可以解决此问题。
    Mark Zhou
    2009年8月25日 4:50
  • 全局变量和函数可以通过IHTMLDocument.Script的同名属性和方法访问

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月25日 16:38