使用 JavaScript 处理点击激活插件

从 Firefox 26 版本开始——以及在旧版 Firefox 中针对不安全的 Flash/Java 的情况——大多数插件将不会自动激活。因此,我们不能再在插件插入页面后立即启动它们。本文介绍了我们可以用来处理插件的 JavaScript 技术,从而减少受影响站点出现故障的可能性。

使用脚本确定插件是否已安装

要检测插件是否已安装,我们可以查询 navigator.mimeTypes 以获取我们打算使用的插件 MIME 类型,以区分未安装的插件和点击激活的插件。例如:

function isJavaAvailable() {
    return 'application/x-java-applet' in navigator.mimeTypes;
}

注意:请勿遍历<a href="https://mdn.org.cn/docs/Web/API/NavigatorPlugins.mimeTypes">navigator.mimeTypes</a><a href="https://mdn.org.cn/docs/Web/API/NavigatorPlugins.plugins">navigator.plugins</a>,因为在 Firefox 的未来版本中,枚举可能会作为隐私保护措施被移除。

使用脚本回调确定插件何时激活

接下来需要注意的是,在页面上创建插件实例后立即对其进行脚本化,以避免由于插件未正确加载而导致故障。插件在创建后应使用 <a href="https://mdn.org.cn/docs/Gecko_Plugin_API_Reference/Scripting_plugins">NPRuntime</a> 脚本调用 JavaScript。

function pluginCreated() {
    document.getElementById('myPlugin').callPluginMethod();
}

  

请注意,必须由您的插件实现“回调”参数(或等效参数)。这可以通过使用 flash.external.ExternalInterface API 在 Flash 中完成,或者通过使用 netscape.javascript 包在 Java 中完成。

使用插件上的属性确定其何时激活

当使用不允许我们指定回调且我们无法修改的插件时,一种替代技术是测试插件应该具有的属性,使用如下代码结构:

Waiting for the plugin to activate!

window.onload = function () {
    if (document.getElementById('myPlugin').myProperty !== undefined) {
        document.getElementById('myNotification').style.display = 'none';
        document.getElementById('myPlugin').callPluginMethod();
    } else {
        console.log("Plugin not activated yet.");
        setTimeout(checkPlugin, 500);
    }
}

使插件在页面上可见

当站点希望用户启用插件时,主要指示器是插件在页面上可见,例如:

Screenshot of the silverlight plugin activation on the Netflix website.

如果页面创建了一个非常小或完全隐藏的插件,则用户唯一可见的指示是 Firefox 位置栏中的小图标。即使插件元素最终会被隐藏,页面也应该在页面上创建可见的插件元素,然后仅在用户激活插件后调整其大小或隐藏它。这可以通过与我们上面显示的回调技术类似的方式完成。

function pluginCreated() {
  // We don't need to see the plugin, so hide it by resizing
  var plugin = document.getElementById('myPlugin');
  plugin.height = 0;
  plugin.width = 0;
  plugin.callPluginMethod();
}


  

注意:有关插件如何在 Firefox 中运行的更多基本信息,请阅读 support.mozilla.org 上的为什么我必须点击才能激活插件?

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,负责编写有关开放式 Web 应用、HTML/CSS/JavaScript、A11y、WebAssembly 等方面的文档和演示。他喜欢捣鼓 Web 技术,并在会议和大学偶尔做一些技术讲座。他曾为 Opera 和 W3C 工作过,喜欢演奏重金属鼓和喝好啤酒。他与他的妻子和三个可爱的孩子住在英国曼彻斯特附近。

更多 Chris Mills 的文章……

关于 Robert Nyman [荣誉编辑]

技术布道师和 Mozilla Hacks 编辑。进行 HTML5、JavaScript 和开放 Web 方面的演讲和博客创作。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作——在瑞典和纽约市。他还定期在 http://robertnyman.com 上发布博客,并喜欢旅行和结识新朋友。

更多 Robert Nyman [荣誉编辑] 的文章……