Открыть файл из элемента управления WebBrowser? - PullRequest
3 голосов
/ 28 ноября 2008

Кто-нибудь знает, возможно ли открыть файл в файловой системе по ссылке в компоненте WebBrowser? Я пишу небольшой инструмент для создания отчетов, в котором я отображаю резюме в виде HTML в компоненте WebBrowser со ссылкой на более подробный анализ, который сохраняется в виде файла Excel на диске.

Я хочу, чтобы пользователь мог щелкнуть эту ссылку в веб-браузере (в настоящее время это просто стандартный тег href с файлом: //path.xls в качестве цели) и получить запрос на открытие файла. Если я открываю свою страницу в IE, это работает, но в элементе управления WebBrowser (C # Windows Forms, .Net 2.0) ничего не происходит.

Я не знаю, нужны ли мне какие-то дополнительные разрешения / доверие или еще что-нибудь - кто-нибудь сделал это успешно или кто-нибудь может подсказать, как это отладить?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2008

Я также проверял решение Росса, и оно работало для меня тоже.

Но вот другой подход, вместо использования встроенной функциональности, которая вызывает диалоговое окно с просьбой загрузить, открыть или отменить загрузку, вы можете использовать свой собственный код C # в своем приложении (не HTML-страницу) для откройте файл (или, возможно, сделайте что-нибудь еще).

Согласно 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" });
    }

}
1 голос
/ 28 ноября 2008

Я только что попробовал это со ссылкой, которая выглядит как Test

и все заработало как положено.

Вы указываете полный путь к xls?

...