如何允许 DotNetBrowser v. 1.21.5.0 访问存储在本地机器上的 EXE 文件

How to allow DotNetBrowser v. 1.21.5.0 to access EXE file stored on local machine

我有一个关于在 C# 项目中使用 DotNetBrowser 库的具体问题。我问是因为我已经在这里看到了 DotNetBrowser 的一些答案,我认为有人可能会为我提供答案。

问题来了: 我所在的组织目前正在使用 DotNetBrowser 版本 1.21.5.0 在用 C# 编写的应用程序中显示一些网页。然而,我们的一些页面有链接来触发存储在本地机器上的 'exe' 文件。由于某种原因,此版本的 DotNetBrowser 失败了。

是否有我可以设置的设置来指示浏览器允许触发本地 exe。在 chrome 这工作正常。奇怪的是,这个版本的文档很少,或者提供的链接不再有效。所有有效的解决方案都指向对我无用的较新版本。我特指1.21.5.0版本。

如有任何建议,我们将不胜感激。

为此,您需要使用自定义加载处理程序或在Browser.LoadHandler中拦截所需的URL,并通过Process.Start()方法将其传递给应用程序。

以下文章介绍了如何在 Windows 系统中注册此类应用程序:https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

下面的示例演示了如何处理 mailto 协议并启动在 Windows 中注册的默认电子邮件程序:

using System.Diagnostics;
using System.Windows;
using DotNetBrowser;
using DotNetBrowser.WPF;

namespace WpfApplication8
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            WPFBrowserView browserView = new WPFBrowserView();
            browserView.Browser.LoadHandler = new CustomLoadHandler();
            mainGrid.Children.Add(browserView);
            browserView.Browser.LoadHTML("<a href='mailto:email@info.it'>email@info.it</a>");
        }

        private class CustomLoadHandler : DefaultLoadHandler
        {
            public override bool OnLoad(LoadParams loadParams)
            {
                if (loadParams.Url.StartsWith("mailto:"))
                {
                    Process.Start(loadParams.Url);
                    return true;
                }

                return base.OnLoad(loadParams);
            }
        }
    }

注意:仅当任何电子邮件程序已在 Windows 中注册时,此示例才有效。否则,您应该提供电子邮件程序的完整路径并添加来自 URL 的参数(如电子邮件地址、主题等):

Process.Start("Full path to the program", "Arguments (e-mail address, subject, etc.)")

该方法对于您要启动的任何其他程序都是相同的。