首先我自己写了个方法来解析HTML的JSpublic virtual string GetScriptAnalysisHtml(string html)
        {
            string result = string.Empty;
            try
            {                HTMLDocumentClass doc = new HTMLDocumentClass();
                IHTMLDocument2 hc = doc;
                hc.write(html);
                hc.close();
                doc = (HTMLDocumentClass)hc;
                result = doc.documentElement.innerHTML;
                hc.close();
                doc.close();
            }
            catch (Exception exp)
            {
            }            return result;
        }
但效果不理想, JS函数定义在页面里可以解析,但是如果JS是单独文件就无法解析了
为描述得更清楚我下具体描述一下
不要说用HttpWebRequest<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title>test </title>
    <script src="http://localhost/js/a.js" type="text/javascript" ></script>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="robots" content="index,follow">
   
</head>
<body >
 
    <script type="text/javascript">
    function myfun()
    {
     document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
     myfun2();
    }
    myfun();
    </script>
    
    <iframe src="http://www.google.cn/" ></iframe>
</body>
</html>我打个比方 HttpWebRequest 和Webbrowser出来的效果绝对不一样 
这段HTML网页代码 如果用 
HttpWebRequest 取出来 就跟这个网页代码一样一样,肯定不是我想要的,我想要的是被解析过后的 文档对象, 
用webbroser取出来的结果是 
<HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
    function myfun()
    {
     document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
     myfun2();
    }
    myfun();
    </SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> out textout textout textout text <A href="http://www.baidu.com">click here</A>call myfun2 out text this <IFRAME src="http://www.google.cn/"></IFRAME></BODY>这是我想要的结果 :JS方法myfun 和myfun2两个方法都已经被解析了(myfun2定义在JS文件里) 
而我用自己定义的 GetScriptAnalysisHtml 函数解析结果为 <HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
    function myfun()
    {
     document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
     myfun2();
    }
    myfun();
    </SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> <IFRAME src="http://www.google.cn/"></IFRAME></BODY>结果正确了一半 看到没有 js代码定义在页面上的被成功解析,但JS代码定义在单独js文件里的没有被成功解析(即不会去下载JS文件解析) 
需求,我现在想改写GetScriptAnalysisHtml 方法使它能够做到和webbrowser一样的解析效果(即可以去下载JS文件定义的函数再解析) 
这就是我的需求 另外不要再说直接用webbrowser控件,我的程序是服务方式运行webbrowser必须要有窗口句柄不然会报错,如果有人看明白了我的问题,你已经算半个高手了,如果有人解答我的问题那就是高手中的高手

解决方案 »

  1.   

    学习下
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   

    学习下
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  3.   

    我不知道你要调用它的JS干嘛?你最主要的目的还是通过程序,向网站的服务器发出指令,以实现某种操作。
    JS是客户端的代码,或许它通过了ajax返回到了服务器端,但其核心还是跟服务器交互的内容。
    我想你只要搞通它是怎样通过ajax调用服务器端,就可以直接用代码仿真出它的JS操作。
      

  4.   

    CSDN的BUG就是要回复才能看见回贴 几个月了还没解决 
      

  5.   

    echeng192 这位兄弟是越扯越远了,呵呵
      

  6.   

    楼主描述的这么清楚,还会有看不懂问题的吗。
    一个笨方法:分三个阶段处理。
    第一步,读取html内容,发现有引入js文件的,<script src=  就下载js文件,然后把内容加到html中单独的一段。并去掉这段引入文件的代码。就是把引入js文件,变成嵌入js代码。
    第二步,按照你现在解析方法,应该能生成正确的执行后的html。
    第三步,从生成的html中,把第一步程序嵌入的js代码,还原成引入js文件方式。
      

  7.   

    看了一下webbrowser的源码,public WebBrowser() : base("8856f961-340a-11d0-a96b-00c04fd705a2")
    也不知道执行了什么东西
      

  8.   

    看了一下webbrowser的源码,public WebBrowser() : base("8856f961-340a-11d0-a96b-00c04fd705a2")
    也不知道执行了什么东西
      

  9.   

    http://stackoverflow.com/questions/268320/execute-a-javascript-function-in-a-c-application
    看有没有用,我没试...
      

  10.   

    我也找了很久webBrowser过滤图片,无果啊通过webBrowser到底有什么解决方法没有。