使用C#处理WebBrowser控件在不同域名中的跨域问题(2)


using System;
using System.Windows.Forms;
using mshtml;
namespace WebBrowserTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate(this.textBox1.Text);
}
private void button2_Click(object sender, EventArgs e)
{
var doc = this.webBrowser1.Document;
var frames = doc.Window.Frames;
String testValue = doc.GetElementById("search").GetAttribute("value");
IHTMLDocument3 baiduDoc = CorssDomainHelper.GetDocumentFromWindow(frames[0].DomWindow as IHTMLWindow2);
baiduDoc.getElementById("kw").setAttribute("value", testValue);
baiduDoc.getElementById("su").click();
}
}
}


最后运行一下程序可以看到我们可以正常获取到百度上的元素了。

使用C#处理WebBrowser控件在不同域名中的跨域问题


补充一下路过秋天说的问题
其实关于这些接口其实我也没有很深入的研究过,不过网上倒是能搜到很多相关资料介绍这些接口的不同,我这里给一个链接:

然后关于我上面的代码为什么要使用IHMLDocument3,而不是其它两个接口,因为IHMLDocument3这个接口里面定义了我需要的getElementById这个方法。
通过查看MSDN,你可以找到你需要的属性或者方法,然后直接在代码里面转换为你需要的类型使用就可以了,它们之间都是可以互相转化的。比如上面我用完了getElementById方法,我需要查看网页的title,那么可以将我上面的baiduDoc变量强制转为IHMLDocument2,然后就可以直接使用它的title属性了。
参考链接
(v=vs.85).aspx

(v=VS.85).aspx

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdjsj.html