想法很蛋疼,但是因为特殊需要.....        private void Form1_Load(object sender, EventArgs e)
        {
            //webBrowser1.Url = new Uri("about:blank");
            WebClient a = new WebClient();
            string b = a.DownloadString("http://www.baidu.com");
            a.Dispose();
            webBrowser1.Document.Write(b);
        }        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            e.Cancel = true;
            WebClient a = new WebClient();
            string b = a.DownloadString(e.Url.OriginalString);
            a.Dispose();
            webBrowser1.Document.OpenNew(true);
            webBrowser1.Document.Write(b);
        }上面的代码就是雏形了,但是Document.Write之后,外部的文件他不会自动下载,导致很多JS都出错,CSS也没了,这可怎么办呢?

解决方案 »

  1.   

    为啥webbrowser还要配合webclient呢 你直接webbrowser.navigate不就行了
      

  2.   


    即使用也要知道  HttpWebRequest  WebClient 的区别 我看你这么使用WebClient  实在感到困惑
      

  3.   

    我刚好做到相似的功能,碰到相同问题,所以给你个提示:
            private void Form1_Load(object sender, EventArgs e)
            {
                //webBrowser1.Url = new Uri("about:blank");
                WebClient a = new WebClient();
                string b = a.DownloadString("http://www.baidu.com");
                a.Dispose();
                webBrowser1.Document.Write(b);
                webBrowser1.Url=new Uri("http://www.baidu.com");  //加上这一句就行,这样就使网页能找到下载CSS JS的路径 不过我上一句用的是:webBrowser1.DocumentText=b
            }
      

  4.   

    IE的webbrowser正如楼主所说是个相当“蛋疼”的控件。写一小软件对网页做一定改动,而网页<head>里的有些内容,网页加截后修改了也没用,所以只好提前对HTML字符串做修改。
      

  5.   

    WebClient.DownloadString 并没有下载附加的图片、JS、CSS只是HTML string,HTML string里大部份网页只有提供相对地址,加截入webbrowser后没有得到相应效果,而在最后加上:webBrowser1.Url=new Uri("http://www.baidu.com");就是给网页提供个绝对地址。
      

  6.   

    没有navigate就不是重新下载htmlstring
      

  7.   


    这样和直接Navigate好像没区别了...
      

  8.   

    我的需求比较特殊,我要控制网页的下载(JS和图片不控制,其他的php,html都要控制),但是渲染还是交给WebBrowser,请问能实现吗?
      

  9.   

    正则替换,请参见:
    http://stackoverflow.com/questions/7075683/help-identifying-issue-in-relative-to-absolute-url-regex-replacement
      

  10.   

    晕!
    "但是Document.Write之后,外部的文件他不会自动下载,导致很多JS都出错,CSS也没了"
    这是什么原因呢?是因为,网页有些url是相对地址,所以你得换成绝对地址才行。
    比如:
    <link href="./web.css" rel="stylesheet" type="text/css" />webBrowser1.Document.Write(b);
    url="about:blank"情况下,CSS就无效。
    但如你如果改成:
    <link href="http://www.baidu.com/web.css" rel="stylesheet" type="text/css" />
    这样的绝对地址CSS就正常了。
    js文件也一样。所以,用正则把html字符串里有关url相对地址的内容改为绝对地址,就行了。
      

  11.   

    太绕了,WebBrowse就可以直接获取网页内容,加上com接口,截图,截文件,模拟操作,什么都可以干。或则你是想 直接用webClient把文件下载到本地,成local文件,再用WebBrowse打开??
      

  12.   


    你好,替换之后css和img都解决了,但是JS全都出错啊,这是怎么回事?
      

  13.   

    到底是什么需求会这么蛋疼喔,如果只需要获取网页的信息的话,直接webclient去挨着挨着请求就可以了丫
      

  14.   

    WebBrowse.IsScriptEnabled = true; 
      

  15.   

    我也不知道。网上看到的。不过我没发现这种情况。可能
    1 js用绝对路径了下载了?
    2 你的网页js里可能有document.write写入非绝对路径的标签。那就比较麻烦了。
      

  16.   

    一般说来,webbrowser.navigate就是呈现嘛
    你可以试试呈现的时候就直接webbrowser.navigate就好了呗,然后你实在是需要处理网页源代码的话,另外重新下载一下,在后台代码中慢慢处理,这样应该也行吧?
      

  17.   


    貌似是没下载,因为错误显示的是某某函数未定义,怎么JS就不会自动下载了呢?CSS都实现了..
      

  18.   

    你还是把你的网站地址给贴出来吧。或者把你转换成绝对址址后的html字符串贴出来看看。应该是代码问题。
      

  19.   


    随便哪个有JS的网站,例如www.xunlei.com
      

  20.   

    www.xunlei.com我测了一下,只出现“该方法无法使用在此上下文中”类似错误,比如第30行:
    document.domain = "xunlei.com" ;这类语句,“about:blank”下肯定不行的。用:
    webbrowser1.ScriptErrorsSuppressed = true; 隐去不影响网页正常运行。“某某函数未定义”没发现啊。况且“www.xunlei.com”本身全部就是完整URL.
      

  21.   


    奇怪了,我怎么不行啊...
    我的代码:        private void Form1_Load(object sender, EventArgs e)
            {
                WebClient a = new WebClient();
                a.Encoding = Encoding.UTF8;
                string b = a.DownloadString("http://www.xunlei.com");
                a.Dispose();
                webBrowser1.Document.Write(b);
            }出错信息:
    属性"XXXX"的值为NULL,未定义或不是Function对象
      

  22.   

    webBrowser1.Document.Write(b); ====>webBrowser1.DocumentText = b;
      

  23.   

    webBrowser1.DocumentText=b还要做一步  替换 </head>  》  <base href="http://www.baidu.com/"></head>
      

  24.   

    到此为止,结束了。
    转换方法。不用string了。直接http。不能在一棵树上呆死。