如何在webbrowser中让页面中的js运行前替换一个js代码呢。例如网页中有一个脚本段,里面有一个:alert("a")和 username.focus()在页面下载完以后激发完成事件时,通过WebBrowser1.Document.All.tags("script")找出所有脚本段,然后替换里面的内容。
现在的问题,替换时,alert已经发生了,再替换也没用了。我试了几个事件,只有navigatecompelete2事件可以在js运行前替换,但是有一个严重问题就是这个事件发生时,整个html还没有下载完,所以网页后面部分的js脚本根本检测不到。等下载完,又不发生这个事件了,其他事件发生时,例如downloadcompelete事件发生时,js已经运行了,我指的运行就是alert()函数已经弹出了。难道没有一个标准的下载完未激活的事件?

解决方案 »

  1.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>物业税开征渐近:“空转”今年将推广至全国_理财跟贴_网易跟贴</title>
    <body>
    <div></div>
    <div><script type="text/javascript">
    var mydate = new Date();
    var mytimestamp = parseInt(mydate.valueOf() / 1000);
    alert("s");
    </script>
    <script type="text/javascript">
    document.focus();
    alert("vvvvvv");
    var mydate = new Date();
    var mytimestamp = parseInt(mydate.valueOf() / 1000);</script>
    </div>
    </body>
    </html>
    就是这段代码,现在两个script段,现在是要在运行前检测到第二段代码,删除其中的alert("vvvvvv"),但是如果这段代码放在第一段代码之前(也就是把两个script调换一个位置),就可以检测到,放最后面就检测不到。
    就是用navigatecomplete2事件进行检测。
      

  2.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
    <title>物业税开征渐近:“空转”今年将推广至全国_理财跟贴_网易跟贴 </title> 
    <body> 
    <div> 
    </div> 
    <div> 
    <script type="text/javascript"> 
    document.focus(); 
    alert("vvvvvv"); 
    var mydate = new Date(); 
    var mytimestamp = parseInt(mydate.valueOf() / 1000); 
    </script> 
    <script type="text/javascript"> 
    var mydate = new Date(); 
    var mytimestamp = parseInt(mydate.valueOf() / 1000); 
    alert("s"); 
    </script> 
    </div> 
    </body> 
    </html> 也就是说如果变成这样的,那么在navigatecomplete2事件中就可以检测到,是不是有点莫名其妙啊。
      

  3.   

    现在又发现了一个怪事了,在WebBrowser1_NavigateComplete2事件中获取的document.documentelement.outerhtml居然是这样的:怎么第二段script消失了?居然还有</html>如果是没有下载完那么也不应该有</html>啊。
    <HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>物业税开征渐近:“空转”今年将推广至全国_理财跟贴_网易跟贴</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312"></HEAD>
    <BODY>
    <DIV></DIV>
    <DIV>
    <SCRIPT type=text/javascript>
    document.focus();
    alert("vvvvvv");
    var mydate = new Date();
    var mytimestamp = parseInt(mydate.valueOf() / 1000);</SCRIPT>
    </DIV></BODY></HTML>
      

  4.   

    NavigateComplete 中往head插入你的js
      

  5.   

    http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx可以先下载源码,运行一下,看看是不是你想要的效果。
      

  6.   

    这个简单,实现一个MIME Filter,监控所有文本文件的下载,在WebBrowser加载之前修改其中的JS内容就行了。
      

  7.   


    使用响应 DocumentComplete而不是NavigateComplete2.这个时候文档并不一定都下载完了。
      

  8.   

    如果想禁止alert,可以hook IE的alert函数。
      

  9.   

    想禁止alert最简单的方法
    写入
    function alert(){return true}