如何解决WebBrowser控件:禁用跨站点XSS过滤或另一种在HTML上完全处理JS的方法
| 我正在尝试使用Web浏览器控件从特定页面(包括所有子页面内容)获取检索日期。问题是某些子页面位于单独的域中,因此当我尝试通过[document.windows.frames(i).document]访问框架时,出现权限指定错误。 现在,我了解了这种情况发生的原因,如http://msdn.microsoft.com/zh-cn/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提供了安全性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。