我正在使用 wpf WebBrowser 控件 (System.Windows.Controls),我需要防止用户执行各种操作,例如下载文件或打印页面。我在 Internet Explorer 选项中禁用了文件下载选项(安全选项卡 -> 自定义级别 -> 下载 -> 文件下载)。正因为如此,在单击 pdf 链接后,而不是文件下载弹出窗口,我得到一个带有这样一条消息的弹出窗口:“您当前的安全设置不允许下载此文件”。
有没有办法防止此消息发生?我只想从用户的角度不执行任何操作。我用IE10。
我正在使用 wpf WebBrowser 控件 (System.Windows.Controls),我需要防止用户执行各种操作,例如下载文件或打印页面。我在 Internet Explorer 选项中禁用了文件下载选项(安全选项卡 -> 自定义级别 -> 下载 -> 文件下载)。正因为如此,在单击 pdf 链接后,而不是文件下载弹出窗口,我得到一个带有这样一条消息的弹出窗口:“您当前的安全设置不允许下载此文件”。
有没有办法防止此消息发生?我只想从用户的角度不执行任何操作。我用IE10。
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>