2008-11-28 9 views
3

Est-ce que quelqu'un sait s'il est possible d'ouvrir un fichier dans le système de fichiers via un lien dans un composant WebBrowser? J'écris un petit outil de reporting dans lequel j'affiche un résumé en HTML dans un composant WebBrowser avec un lien vers une analyse plus détaillée qui est enregistrée sous forme de fichier Excel sur le disque.Ouvrir un fichier depuis un contrôle WebBrowser?

Je souhaite que l'utilisateur puisse cliquer sur ce lien dans le navigateur Web (actuellement une balise href standard avec le fichier: //path.xls comme cible) et recevoir une invite pour ouvrir le fichier. Si j'ouvre ma page dans IE, cela fonctionne, mais dans le contrôle WebBrowser (C# Windows Forms, .Net 2.0) rien ne se passe.

Je ne sais pas si j'ai besoin d'autorisations/de confiance supplémentaires, par exemple, est-ce que quelqu'un l'a fait avec succès ou est-ce que quelqu'un pourrait suggérer comment le déboguer?

Répondre

1

Je viens d'essayer cela avec un lien qui ressemble < a href = "file: /// C: \ temp \ browsertest \ bin \ Debug \ testing.xls" > test </a >

et cela a fonctionné comme prévu.

Spécifiez-vous le chemin d'accès complet aux xls?

2

J'ai également testé la solution de Ross et cela a fonctionné pour moi aussi. Mais voici une autre approche, au lieu d'utiliser la fonctionnalité intégrée qui affiche une boîte de dialogue vous demandant de télécharger, d'ouvrir ou d'annuler le téléchargement, vous pouvez utiliser votre propre code C# dans votre application (pas la page HTML) pour ouvrir directement le fichier (ou peut-être faire autre chose).

Comme par exemple Microsoft MSDN:

using System; 
using System.Windows.Forms; 
using System.Security.Permissions; 

[PermissionSet(SecurityAction.Demand, Name="FullTrust")] 
[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
public class Form1 : Form 
{ 
    private WebBrowser webBrowser1 = new WebBrowser(); 
    private Button button1 = new Button(); 

    [STAThread] 
    public static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form1()); 
    } 

    public Form1() 
    { 
     button1.Text = "call script code from client code"; 
     button1.Dock = DockStyle.Top; 
     button1.Click += new EventHandler(button1_Click); 
     webBrowser1.Dock = DockStyle.Fill; 
     Controls.Add(webBrowser1); 
     Controls.Add(button1); 
     Load += new EventHandler(Form1_Load); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     webBrowser1.AllowWebBrowserDrop = false; 
     webBrowser1.IsWebBrowserContextMenuEnabled = false; 
     webBrowser1.WebBrowserShortcutsEnabled = false; 
     webBrowser1.ObjectForScripting = this; 
     // Uncomment the following line when you are finished debugging. 
     //webBrowser1.ScriptErrorsSuppressed = true; 

     webBrowser1.DocumentText = 
      "<html><head><script>" + 
      "function test(message) { alert(message); }" + 
      "</script></head><body><button " + 
      "onclick=\"window.external.Test('called from script code')\">" + 
      "call client code from script code</button>" + 
      "</body></html>"; 
    } 

    public void Test(String message) 
    { 
     MessageBox.Show(message, "client code"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     webBrowser1.Document.InvokeScript("test", 
      new String[] { "called from client code" }); 
    } 

} 
Questions connexes