如何禁用wpf webbrowser控件上的drop

时间:2010-07-16 14:45:33

标签: c# wpf security xaml browser

如何禁止在System.Windows.Controls.WebBrowser上删除文件?从文档中可以看出,默认情况下应禁用此行为,因为它是从UIElement.AllowDrop属性继承的。

但是dy默认我可以将文件拖放到WebBrowser控件上。除此之外,我似乎无法禁用这种所谓的非默认行为。例如,如果我在XAML中将属性的值显式设置为false

<WebBrowser Name="webBrowser1" AllowDrop="False" />

..和/或代码隐藏,即

webBrowser1.AllowDrop = false;

然后我仍然可以将文件拖放到控件上。如何禁用此行为并消除其创建的安全风险?

3 个答案:

答案 0 :(得分:4)

好好玩了几个小时后,我想出了一个有效的解决方案。因为我使用标准的WPF webbrowser,我知道我也可以使用Microsoft为Internet Explorer引入的“扩展事件属性”。

我用来禁止将文件拖放到控件上的事件是ondragover。基本上我只是在发生这种情况时取消该事件。

<body ondragover="window.event.returnValue=false;">

这不是很理想 - 但是这项技术的好处在于它允许设置一系列其他属性,这些属性不能直接从托管代码中获得。对于未在托管代码中公开的滚动条状态,可以通过这种方式设置。

<body scroll="no">

答案 1 :(得分:1)

我尝试了很多东西,但看起来WebBrowser控件在布局引擎想要的任何东西之上断言它的首要地位。除了控制选址外,它不服从甚至真正坐在视觉树中。 Panel.ZIndex没有效果,等等。

也许是一个不同的HTML布局控件,这个控件的行为比ActiveX IE 6/7/8接口要好:

Replacing .NET WebBrowser control with a better browser, like Chrome?

答案 2 :(得分:1)

通过反思来做这件事有点棘手:

1。)通过在非公共实例属性&#34; AxIWebBrowser2&#34;上调用getter获取底层浏览器COM实例(SHDocVw.IWebBrowser2)。

2。)设置属性&#34; RegisterAsDropTarget&#34;通过调用属性setter,在浏览器COM对象上为false。

这就是全部。

var webBrowser = this.WebBrowser.GetType().InvokeMember("AxIWebBrowser2",
                                                        BindingFlags.Instance |
                                                        BindingFlags.NonPublic |
                                                        BindingFlags.GetProperty,
                                                        null,
                                                        this.WebBrowser,
                                                        new Object[] { });

webBrowser.GetType().InvokeMember("RegisterAsDropTarget",
                                  BindingFlags.Instance |
                                  BindingFlags.SetProperty,
                                  null,
                                  webBrowser,
                                  new Object[] { false });

提示:&#34; this.WebBrowser&#34;是你的WPF WebBrowser实例(System.Windows.Controls.WebBrowser)。