现有一个HTML页面代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
下载测试
<br />
<a href="./download_test/普通昆虫学.pdf">PDF文件测试</a>
</body>
</html>
使用Chrome浏览器打开后效果如下:
点击此超链接后,浏览器会自动打开指定的PDF文件,而不是将它下载到本地。
DotNetBrowser是一个应用于.NET程序的Chromium引擎,也存在这一问题。
建立一个Windows窗体应用程序DotNetBrowserTest,窗体名称定为FormMain,在构造函数调用InitializeComponent方法后继续添加四行代码:
using DotNetBrowser;
using DotNetBrowser.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DotNetBrowserTest
{
public partial class FormMain : Form
{
Browser browser = null;
public FormMain()
{
InitializeComponent();
//添加以下四行代码
browser = BrowserFactory.Create();
WinFormsBrowserView browserView = new WinFormsBrowserView(browser);
pnlBrowser.Controls.Add(browserView);
browser.LoadURL((new FileInfo("DotNetBrowserJsTest.html")).FullName);
// --DotNetBrowserJsTest.html即本文一开始所列出的HTML代码文件
}
}
}
程序运行结果如下:
点击链接后,PDF文件会被直接打开
这是因为Chromium引擎附带的PDF文件读取插件在起作用。如果我们想在点击此超链接后,直接将PDF下载到本地,需要设置我们自己的插件列表。
参考链接:https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000110046-plugins-manager
建立一个新的类CustomPluginFilter,继承自PluginFilter,实现方法IsPluginAllowed
using DotNetBrowser;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotNetBrowserTest
{
class CustomPluginFilter : PluginFilter
{
public bool IsPluginAllowed(PluginInfo pluginInfo)
{
return !pluginInfo.MimeTypes.Contains("application/pdf");
}
}
}
再在原窗体的Load函数中,添加下面一行代码,实现对PDF-Viewer插件的禁用
browser.PluginManager.PluginFilter = new CustomPluginFilter();
此时再运行程序可发现,点击指向PDF文件的超链接后,不会再打开PDF文件,而是让用户选择文件要下载到的位置。
END