2013-07-17 32 views
7

Tôi đang sử dụng điều khiển wpf WebBrowser (System.Windows.Controls) và tôi cần ngăn người dùng thực hiện các tác vụ khác nhau như tải xuống tệp hoặc in trang. Tôi đã tắt tùy chọn tải xuống tệp trong tùy chọn Internet Explorer (tab Bảo mật -> Mức tùy chỉnh -> Tải xuống -> Tải xuống tệp). Do đó, sau khi nhấp vào giả sử trên liên kết pdf, thay vì cửa sổ bật lên tải xuống tệp, tôi nhận được cửa sổ bật lên với thông báo như vậy: "Cài đặt bảo mật hiện tại của bạn không cho phép tải xuống tệp này".IE10 - cách ngăn không cho cửa sổ bật lên "Cài đặt bảo mật hiện tại của bạn không cho phép tải xuống tệp này" xuất hiện?

Có cách nào để ngăn không cho thông báo này xảy ra không? Tôi chỉ muốn không có hành động nào được thực hiện từ góc nhìn của người dùng. Tôi sử dụng IE10.

Trả lời

9

WPF WebBrowser là một trình bao bọc giới hạn (chưa inextensible, sealed) xung quanh điều khiển WebBrowser ActiveX. May mắn thay, có một hack chúng ta có thể sử dụng để lấy đối tượng ActiveX bên dưới (lưu ý điều này có thể thay đổi trong các phiên bản tương lai của .NET). Dưới đây là làm thế nào để chặn một download file:

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> 
+0

tôi sẽ cố gắng giải pháp của bạn vào đầu tuần tới. Hy vọng nó hoạt động để tôi có thể chấp nhận câu trả lời của bạn. – aligator

Các vấn đề liên quan