【问题标题】:Prevent webbrowser control loading javascript from certain domain防止 webbrowser 控件从特定域加载 javascript
【发布时间】:2015-04-21 04:47:43
【问题描述】:

我正在将 html 页面加载到 C# webbrowser 对象中。 html 页面中的脚本标签之间有一些远程 javascript 文件的链接。其中一个有许多我无法纠正的错误,因为我无法更改 javascript。由于不需要,我宁愿禁用它。

我想停止网络浏览器从特定域加载任何 javascript,或者只是让浏览器为该 javascript 文件返回“404”。这可以在 Fiddler 中使用 Autoresponder 完成。

有没有办法在 C# 中做到这一点?就像一个迷你代理转发所有请求,除了那些到 *.domainwitherrors.com?如果做不到这一点,有没有办法在 C# 中直接使用 Fiddler?

在 webbrowser 中捕获“导航”事件不会在 javascript 加载到 DOM 之前捕获它。

   webBrowser1.Navigate("http://www.somedomain.com");
   webBrowser1.Navigating += webBrowser1_Navigating;

    void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        if (e.Url.ToString().Contains("domainwitherrors"))
        {
            return;
        }

}

【问题讨论】:

    标签: javascript c# webbrowser-control fiddler fiddlercore


    【解决方案1】:

    不,WebBrowser 控件不提供任何请求过滤机制,可让您阻止仅来自一个域的子下载。您可以使用 IE 的工具 > Internet 选项 > 将域添加到您的受限站点区域(这将阻止其在系统上的每个基于 IE 的浏览器中运行脚本的能力)安全选项卡。

    FiddlerCore 是一个 .NET 类库,可以嵌入到应用程序中以提供您所描述的那种功能。您甚至可以使用它公开的URLMonInterop.SetProxyInProcess API,以便只有您的应用程序(而不是整个系统)通过代理路由其流量。

    【讨论】:

    • 虽然不是微不足道的,但应该仍然可以为 HTTP 和/或 HTTPS URL 过滤注册一个进程内 Asynchronous Pluggable handler 并使用 WinInet 来实现它。不是吗?
    • @Noseratio:我考虑过提及这一点,但它既非平凡又不受微软技术支持。我们看到的每一次尝试都是安全和可靠性错误的根源。
    • 埃里克,够公平的。我记得在 IE9 之前的时代尝试过可插拔协议,这确实是一条崎岖不平的道路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多