WebBrowser控件:禁用跨站点XSS筛选或其他在HTML上完整处理JS的方式



我正在尝试使用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提供了安全性。

最新更新