Javascript判断系统是否安装Acrobat Reader
现在有一个需求来了,我们需要做一个web应用程序,能够判断客户端是否安装了能够打开PDF文档的软件,例如Acrobat Reader.如果客户端装了这种软件,那么网页就以文件流的形式输出,Acrobat Reader就自动在网页里打开PDF:
我们的解决方案有两步:
第一,在客户端判断系统是否安装了Acrobat Reader.
第二,在程序后端根据回传条件输出文件流.
那么能不能直接在客户端浏览器判断系统安装Acrobat Reader?回答是可以的,用javascript就可以实现了,它的原理是用Javascript脚本来针测浏览器里是否含有Acrobat reader的ActiveX插件.代码实例如下:
function isAcrobatPluginInstall() {
var flag = false;
if (navigator.plugins && navigator.plugins.length) {
for (x = 0; x < navigator.plugins.length; x++) {
if (navigator.plugins[x].name == 'Adobe Acrobat')
flag = true;
}
}
else if (window.ActiveXObject) {
for (x = 2; x < 10; x++) {
try {
oAcro = eval("new ActiveXObject('PDF.PdfCtrl." + x + "');");
if (oAcro) {
flag = true;
}
} catch (e) {
flag = false;
}
}
try {
oAcro4 = new ActiveXObject('PDF.PdfCtrl.1');
if (oAcro4)
flag = true;
} catch (e) {
flag = false;
}
try {
oAcro7 = new ActiveXObject('AcroPDF.PDF.1');
if (oAcro7)
flag = true;
} catch (e) {
flag = false;
}
}
if (flag) {
return true;
}
return flag;
}
最后,将此函数的返回值传回服务器端,做出相应处理,如果没有安装Acrobat reader,就在Http header里加一个键值对"Content-Disposition",就可以弹出提示框来让用户选择是否需要下载PDF附件,之 后用户可以用别的工具打开它.ASP.NET服务端代码如下:
if (!isAcrobatInstall)
this.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "Output.pdf");
以上就是我们的解决方案.