【问题标题】:Webbrowser, detect if there is a PDF reader installed?网络浏览器,检测是否安装了 PDF 阅读器?
【发布时间】:2011-08-04 04:27:55
【问题描述】:

有没有办法检查用户是否安装了 PDF 阅读器? 也许有一个 ActiveX 组件?

你能帮帮我吗?

【问题讨论】:

  • 非常仔细地考虑为什么你想要检测这个以及你想要完成什么。人们可以在没有安装插件的情况下阅读 PDF 文件。

标签: pdf browser internet-explorer-8


【解决方案1】:

您可以使用window.navigator.plugins 检测已安装的插件 这将返回一个包含已安装插件详细信息的数组,但这不适用于 Internet Explorer。运行此代码时,IE 仅在页面中返回带有嵌入标签的数组。谢谢IE,这么有用吗?

好的,让我们试着解决这个问题。以下功能应该可以在除 IE 之外的所有主流浏览器中使用。

function hasPlugin(name) {
    name = name.toLowerCase();
    var plugins = window.navigator.plugins;
    for (var i=0, len = plugins.length; i < len; i++) {
        if (plugins[i].name.toLowerCase().indexOf(name) > -1) {
            return true;
        }
    }
    return false;
}

你可以像这样调用这个函数并检查插件状态

hasPlugin('Flash');
hasPlugin('QuickTime');

对于IE,我们应该试试这个

function hasPlugin(name) {
    try {
        new ActiveXObject(name);
        return true;
    } catch (e) {
        return false;
    }
}

你可以调用这个函数并检查IE的插件状态

hasPlugin('ShockwaveFlash.ShockwaveFlash');

你可以像这样跨浏览器声明这个函数

var hasPlugin;
if (navigator.userAgent.indexOf('MSIE')) {
    hasPlugin = function(name) {
        try {
            new ActiveXObject(name);
            return true;
        } catch (e) {
            return false;
        }
    }
}
else {
    hasPlugin = function(name) {
        name = name.toLowerCase();
        var plugins = window.navigator.plugins;
        for (var i=0, len = plugins.length; i < len; i++) {
            if (plugins[i].name.toLowerCase().indexOf(name) > -1) {
                return true;
            }
        }
        return false;
    }
}

然后就可以跨浏览器的方式调用该函数了。对不起,我没有为我的浏览器安装任何 PDF 插件,-Firefox、Chrome 或 IE- 所以我可以告诉你我们应该传递 hasPlugin 函数的参数的确切名称。

我希望这会对你有所帮助。顺便说一句,我没有在浏览器中尝试过代码,这是我的理论知识。但我想这会对你有所帮助-希望- :-)

【讨论】:

  • 这个答案怎么可能是正确答案?在任何情况下,函数 hasPlugin 都会返回 true。
  • 一定存在 StackOverflow 占用的拼写错误或语法错误。
【解决方案2】:

不,我不这么认为 - 但默认情况下,您始终可以通过 Google 的 PDF 阅读器引导您的链接 - 这对所有人都有效。

http://docs.google.com/viewer

请注意,这将通过 Google 的服务器引导您的 PDF 文件,因此您将失去安全因素。

【讨论】:

  • 请仔细考虑数据保护问题。如果您的用户已将文档上传到您的网站,他们是否知道该文档正在由 Google 处理(因此也可能存储)?
  • 这是一个很好的观点@freefaller - 我会将它添加到答案中以帮助其他人理解这一点。
【解决方案3】:

这对我很有用:

Java script - Adobe plug-in detector

从 cmets 区域,获取 Safari 浏览器的更正。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2011-11-30
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多