C#webbrowser 跨域访问时 如何获得对此网页的绝对权限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#webbrowser 跨域访问时 如何获得对此网页的绝对权限相关的知识,希望对你有一定的参考价值。
我使用C#webbrowser想要获取一个网页里边的控件id,但是进去的时候弹出拒绝访问的警告消息框,然后获得的却是iframe的id,我想要iframe里边的控件的id。
添加COM reference, SHDocVw 及 mshtml将webBrower1.ActiveXInstance属性 传给 SHDocvw.WebBrowser接口
使用SHDocvw.WebBrowser接口下的ProgressChange事件
在Progress.Equals(ProgressMax)时,
取
((webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.HTMLDocumentClass).body.innerText即可
代码类似如此:
private void button1_Click(object sender, EventArgs e)
SHDocVw.WebBrowser wb = webBrowser1.ActiveXInstance as SHDocVw.WebBrowser;
wb.ProgressChange += new DWebBrowserEvents2_ProgressChangeEventHandler(wb_ProgressChange);
object flags = new object(), header = new object(), postdata = new object(), framename = new object();
webBrowser1.Navigate(@"http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&word=%C1%D6%D0%C4%C8%E7&in=31076&cl=2&cm=1&sc=0&lm=-1&pn=0&rn=1&di=503232564&ln=2000&fr=");
void wb_ProgressChange(int Progress, int ProgressMax)
if (Progress.Equals(ProgressMax))
MessageBox.Show(((webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.HTMLDocumentClass).body.innerText);
触发事件你可以再看一下,可能还有更合适的。 但是Progress.Equals(ProgressMax)是最基本的 保证全部加载完毕。
还有个方法你可以自己尝试下,我觉得可以用BHO,但是不知道winform里的webbrowser对象会不会自动加载BHO,用BHO跟上边过程差不多,只是要编成COM 参考技术A 部分代码如下:
在窗口及WebBrowser创建完以后,写此代码:
WebBrowser.OnNewWindow2:=IE1NewWindow2;
给主窗口创建一个方法:
procedure TBrowForm.IE1NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);
Var NewForm:TBrowForm;
begin
try
NewForm :=TPopBrowerForm.Create(application);
NewForm.WebBrowser.OnNewWindow2 :=IE1NewWindow2;//如果在窗口的Oncreate事件
//有此代码,此处就可以省略
ppDisp := NewForm.WebBrowser.Application;
NewForm.Show;
Cancel:=false;
except
end;
end;
什么是跨域?如何实现跨域访问?
跨域是指不同域名之间相互访问。
JavaScript同源策略的限制,A域名下的JavaScript无法操作B或是C域名下的对象
实现:
1、JSONP跨域:利用script脚本允许引用不同域下的js实现的,将回调方法带入服务器,返回结果时回调
2、跨域资源共享(CORS)
跨域资源共享(CORS)是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源
CORS与JSONP相比:
a、JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求
b、使用CORS,开发者可以使用普通的XMLHttpResquest发起请求和获得数据,比起JSONP有更好的错误处理
c、JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
以上是关于C#webbrowser 跨域访问时 如何获得对此网页的绝对权限的主要内容,如果未能解决你的问题,请参考以下文章
从.net(C#)中的Webbrowser控件中检索选定的文本
C#如何获得webbrowser网页里某元素所占用的位置坐标