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服务器定义了一种方式,允许网页从不同的域访问其资源

CORSJSONP相比:

a、JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求

b、使用CORS,开发者可以使用普通的XMLHttpResquest发起请求和获得数据,比起JSONP有更好的错误处理

c、JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS

以上是关于C#webbrowser 跨域访问时 如何获得对此网页的绝对权限的主要内容,如果未能解决你的问题,请参考以下文章

从.net(C#)中的Webbrowser控件中检索选定的文本

C#如何获得webbrowser网页里某元素所占用的位置坐标

什么叫ajax跨域访问

C# WebBrowser 控件:window.external 访问子对象

什么是跨域?如何实现跨域访问?

C# WebBrowser - 如何摆脱 JavaScript 错误提示?