IE10 - 如何防止“您当前的安全设置不允许下载此文件”弹出窗口出现?

7
我正在使用wpf WebBrowser控件(System.Windows.Controls),需要阻止用户执行各种操作,如下载文件或打印页面。我已经在Internet Explorer选项中禁用了文件下载选项(Security标签 -> Custom Level -> Downloads -> File Download)。因此,当单击PDF链接时,我不会弹出文件下载弹出窗口,而是会出现这样的消息弹出窗口: "Your current security settings do not allow this file to be downloaded"。
有没有办法防止这个消息出现?我只想从用户角度来看不执行任何操作。我使用IE10。
1个回答

9

WPF WebBrowser是一个非常有限的(但不可扩展的,封闭)WebBrowser ActiveX控件的包装器。幸运的是,我们可以使用一个hack来获取底层的ActiveX对象(请注意,这在未来版本的.NET中可能会发生变化)。下面是如何阻止文件下载:

using System.Reflection;
using System.Windows;

namespace WpfWbApp
{
    // By Noseratio (http://stackoverflow.com/users/1768303/noseratio)

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.WB.Loaded += (s, e) =>
            {
                // get the underlying WebBrowser ActiveX object;
                // this code depends on SHDocVw.dll COM interop assembly,
                // generate SHDocVw.dll: "tlbimp.exe ieframe.dll",
                // and add as a reference to the project

                var activeX = this.WB.GetType().InvokeMember("ActiveXInstance",
                    BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
                    null, this.WB, new object[] { }) as SHDocVw.WebBrowser;

                // now we can handle previously inaccessible WB events 
                activeX.FileDownload += activeX_FileDownload;
            };

            this.Loaded += (s, e) =>
            {
                this.WB.Navigate("http://technet.microsoft.com/en-us/sysinternals/bb842062");
            };
        }

        void activeX_FileDownload(bool ActiveDocument, ref bool Cancel)
        {
            Cancel = true;
        }
    }
}

XAML:

<Window x:Class="WpfWbApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <WebBrowser Name="WB"/>

</Window>

我会在下周开始尝试您的解决方案,希望它能够正常工作,这样我就可以接受您的答案。 - aligator
有人能用C#给我这个答案吗? - Ajeet Malviya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接