2013-07-17 8 views
7

Utilizzo il controllo WebBrowser wpf (System.Windows.Controls) e devo impedire agli utenti di eseguire varie azioni come scaricare file o stampare pagine. Ho disattivato l'opzione di download del file nelle opzioni di Internet Explorer (scheda Sicurezza -> Livello personalizzato -> Download -> Download file). Per questo motivo, dopo aver cliccato su un link pdf, invece di un popup di download di file, ricevo un popup con questo messaggio: "Le attuali impostazioni di sicurezza non consentono il download di questo file".IE10 - come impedire che venga visualizzato il popup "Le attuali impostazioni di sicurezza non consentono il download di questo file"?

C'è un modo per impedire che questo messaggio si verifichi? Voglio solo che nessuna azione venga eseguita dal punto di vista dell'utente. Io uso IE10.

risposta

9

WPF WebBrowser è un wrapper molto limitato (ma inestensibile, sealed) attorno al controllo ActiveX di WebBrowser. Fortunatamente, c'è un trucco che possiamo usare per ottenere l'oggetto ActiveX sottostante (nota che questo potrebbe cambiare nelle future versioni di .NET). Ecco come bloccare un file di download:

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

Cercherò la soluzione all'inizio della prossima settimana. Spero che funzioni così posso accettare la tua risposta. – aligator

Problemi correlati