IE10 - как предотвратить появление всплывающего окна "Текущие настройки безопасности не позволяют загружать этот файл"?

Я использую wpf WebBrowser control (System.Windows.Controls), и мне нужно запретить пользователям выполнять различные действия, такие как загрузка файлов или страниц печати. У меня отключена опция загрузки файлов в настройках Internet Explorer (вкладка "Безопасность" → "Пользовательский уровень" → "Загрузка" - "Загрузка файла" ). Из-за этого, после нажатия позволяет говорить по ссылке в формате pdf, вместо всплывающего окна загрузки файла я получаю всплывающее окно с таким сообщением: "Ваши текущие настройки безопасности не позволяют загрузить этот файл".

Есть ли способ предотвратить появление этого сообщения? Я просто не хочу, чтобы действия не выполнялись с точки зрения пользователя. Я использую IE10.

Ответ 1

WPF WebBrowser - очень ограниченная (но нерастяжимая, запечатанная) оболочка вокруг элемента управления WebBrowser ActiveX. К счастью, есть хак, который мы можем использовать для получения базового объекта 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>