如何允许 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.)")
该方法对于您要启动的任何其他程序都是相同的。
我有一个关于在 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.)")
该方法对于您要启动的任何其他程序都是相同的。