C#中的如何用webbrowser在显示之前就把指定的内容替换掉?也就是在Navigated的时候就把指定的内容替换。比如我想换到内容"123456"替换成"123"然后再用webbrowser显示出来。求高手。
不要忽略webbrowser的DocumentText这个属性
/// <summary> /// 过滤 /// </summary> /// <param name="tagname">保留的标签名</param> void Filter(string tagname) { StringBuilder sb = new StringBuilder(); HtmlElementCollection hc = webBrowser1.Document.All; //遍历所有元素--此处改成你要的逻辑, foreach (HtmlElement he in hc) { //如果为要保留的标签名 if (he.TagName.ToLower() == tagname.ToLower()) { sb.Append(he.OuterHtml); } } webBrowser1.DocumentText = sb.ToString();//设置html代码 } }
bool IsFilter = false; private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!IsFilter) { IsFilter = true; Filter("img"); } }
可是这样的话会在网页执行之后替换,而不是在网页执行之前替换。
如下面代码
<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}
function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}
object_pop("http://www.xamq.com");
</script>
用什么办法在此段代码执行之前就将launchURL替换掉?用你上面的代码替换显示内容都替换了但是是在js执行之后替换的。。js之前怎样替换?
你的意思就是网页加载时就替换 你直接更改不可以么 难道他会延迟一下在显示你替换的
对就是这样。代码该怎么写呢?
@安美奇: 因为不是我的网站我改不了里面的代码所以需要替换一下。
@安美奇: HtmlElement he = webBrowser1.Document.GetElementById("控件ID");
@┢┦偉: 能不能写具体一点?
是写到这里吗?
void WebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
CheckCommandState();
}
@┢┦偉: 具体的意思,就是写个简单的例子。不好意思,可能我说的不太明白。。我是菜鸟
@┢┦偉: 比如下面这一段
<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}
function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}
object_pop("http://www.xamq.com");
</script>
我想阻止这一种弹窗,麻烦您写一段代码出来。。
第一种方法,可以在请求的页面中加入一个事件或方法,将其替换。
第二种方法,用httpwebrequest将内容获取到本地处理完之后再用webbrower进行显示
请求的页面中加入一个事件或方法,将其替换,麻烦给举个例子呗。。
@安美奇: 比如我打开的网页中包含object.launchURL(url)我想在打开这前把这个launchURL替换掉应该怎么弄?
@安美奇: 植入一段js代码,去替换这url地址
@az235: 关键是我不会植入。
void WebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
CheckCommandState();
}
是写到这里面吗?
@az235: 像下面这一段代码我应该怎么去植入怎么去替换?
<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}
function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}
object_pop("http://www.xamq.com");
</script>
麻烦高手给用C#给简单写个例子。我是菜鸟级别的。。。
如果是等页面下载完了后再改还比较好弄,但如果要在页面未显示前就替换就比较麻烦了,要写一个bho来实现。
这里有个例子,是用c++实现的,http://www.cppblog.com/phenix-burn/archive/2006/08/29/11824.html。不过用C#写bho实现这个功能非常麻烦的。
第一步,用httpwebrequest读取到HTML
第二步,用正则把launchURL(url)替换成自己想要的数据
第三步,用webborwser显示出来,
如果有问题可以加我QQ咨询:hh-jm19890727@163.com
有没有办法修改webbrowser读取html的部分?
@安美奇: 那就得看被替换的是什么了.?
不过要先加载,等待加载完后再替换