我正在尝试使用web浏览器控件从特定页面获取检索日期,包括所有子页面内容。问题是一些子页面在一个单独的域上,因此当我试图访问框架[通过document.windows.frames(I).dococument]时,我得到了一个权限设计错误。
现在我明白了发生这种情况的原因,如http://msdn.microsoft.com/en-us/library/ms533028.aspx.然而,与浏览网站的用户不希望javascript嗅探他们的历史记录/cookie不同,我实际上是在打开我的程序并运行应用程序。
即使我必须手动更改安全设置,也有什么办法可以做到这一点吗?我试着将IE中的所有设置都设置为允许,但仍然出现相同的错误。我只会在本地运行该应用程序,没有人会在IE上浏览,所以我可以更改任何需要的东西来让它发挥作用(甚至安装旧版本的IE,它可能允许它,但仍然可以处理JS处理)。
请注意,我使用web浏览器的原因是,我将访问的绝大多数数据都是JS生成的,所以我需要在JS处理/生成HTML后访问DOM。正因为如此,简单地使用SOCKETS来获取HTML实际上不是一种选择。即使我有HTML,我仍然需要某种类型的引擎来处理所有基于javascript的DOM元素。如果你知道有其他选择,那也是完全可以接受的!
提前感谢!
您可以在服务器上创建一个代理来获取数据,然后将其从自己的域加载到隐藏的div中,然后您将能够使用JS从HTML 中获取所需的数据
您可以创建这样的动态代理页面:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.UI;
public partial class TestPage : Page
{
private WebRequest _request;
protected void Page_Load(object sender, EventArgs e)
{
string text;
string url = Request["UrlToGet"];
_request = (HttpWebRequest)
WebRequest.Create(url);
using (WebResponse response = _request.GetResponse())
{
using (StreamReader reader =
new StreamReader(response.GetResponseStream()))
{
text = reader.ReadToEnd();
}
}
}
}
您所需要做的就是将请求的url放入QueryString或post数据中并且您将在字符串文本
在这种情况下,超文本应用程序可能是一个选项。HTA应用程序在其基本浏览器窗口中运行,但具有可执行文件的权限。有关HTA的更多信息,请参阅本页。请注意,HTA确实为非应用程序帧和iframe提供了安全性。