日期:2014-05-17  浏览次数:21014 次

WebBrowser在网页加载JS文件的时候,如何去修改这个JS文件呢?
比如我有页面a.aspx时里面有加载my.js文件
我如何在WebBrowser加载my.js而还没有在a.aspx执行这些JS的时候
把里面的一句:alert("哈哈")
改为:alert("被我改了")?

万分感谢

------解决方案--------------------
你可以在WebBrowser控件中注入脚本,替换原来脚本的一些方法
(1) 添加 Microsoft.mshtml.dll 引用
(2) 添加代码如下:


private void Form1_Load(object sender, EventArgs e)  
{  
     
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);  
}  
  
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
{  
    var htmlDoc = (IHTMLDocument3)webBrowser1.Document.DomDocument;  
    HTMLHeadElement head = htmlDoc.getElementsByTagName("head").Cast<HTMLHeadElement>().First();  
    var script = (IHTMLScriptElement)((IHTMLDocument2)htmlDoc).createElement("script");  
    script.text = "window.onload=function() { alert('test') }";  
    head.appendChild((IHTMLDOMNode)script);  
}  
  
private void button1_Click(object sender, EventArgs e)  
{  
    webBrowser1.Navigate("http://www.hao123.com");  
}private void Form1_Load(object sender, EventArgs e)  
{  
     
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);  
}  
  
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
{  
    var htmlDoc = (IHTMLDocument3)webBrowser1.Document.DomDocument;  
    HTMLHeadElement head = htmlDoc.getElementsByTagName("head").Cast<HTMLHeadElement>().First();  
    var script = (IHTMLScriptElement)((IHTMLDocument2)htmlDoc).createElement("script");  
    script.text = "window.onload=function() { alert('test') }";  
    head.appendChild((IHTMLDOMNode)script);  
}  
  
private void button1_Click(object sender, EventArgs e)  
{  
    webBrowser1.Navigate("http://www.hao123.com");  
}  


------解决方案--------------------
其实就是调用了,你自己的 JS 而已
------解决方案--------------------
楼住貌似需要的是替换js文件内容,不是插入js.

DocumentCompleted 事件里判断路径,替换js内容应该就可以了.

或者在调用这个js的网页完成处加入判断,把js文件地址换成本地.