在 Javascript 中,我如何测试用户是否安装了 quicktime 插件和 java 插件?
3 回答
这当然在 IE 中不起作用。在 IE 中查看插件的唯一方法是使用 VB 脚本,而且非常奇怪和混乱。您只能测试特定的插件版本,例如,“quicktime”不会削减它。您必须指定版本,对于低于 5 的版本未发布,我找不到版本 7 的参考
对于 Java,您可以使用navigator.javaEnabled()
. 或者你可以看这里:http ://www.pinlady.net/PluginDetect/JavaDetect.htm
对于 QuickTime,您可以:
var QtPlugin = navigator.plugins["Quicktime"];
if (QtPlugin) {//QuickTime is installed}
见这里:http: //javascript.internet.com/miscellaneous/check-plugins.html
上面的例子没有得到你问题的 QuickTime 部分的答案,所以这就是我现在正在写的内容,即使这个问题已经结束并且有点老了。
var p = navigator.plugins;
var qtcheck = 0;
for (i=0;i<p.length;i++) {
if (p[i].name.match(/QuickTime/) != null) {
qtcheck++
}
}
if (qtcheck > 0) { // do nothing, QuickTime is intalled }
else {
videos = document.querySelectorAll('object[type="video/quicktime"]')
// use .getElementById instead if there are multiple videos
// replace them with document.createElement('img')
对于更全面和更简单的方法,即无需担心插件因任何原因被重命名,您可以在 MimeTypes 数组中检查type="video/quicktime"
是否支持对象的最终答案(或者如果您不使用QT 视频,无论你用它做什么)。
这意味着通过插件在循环内创建一个循环,但比字符串匹配更可靠:
function checkQT() {
var p = navigator.plugins;
var QT = false; // assume you don't have it
for (i=0;i<p.length;i++) {
for (j=0;j<p[i].length;j++) {
if (p[i][j].type == "video/quicktime") {
QT = true;
return true;
}
else continue;
return false;
}
}
}
我在网上四处搜索,在这里找到了一堆很棒的 IE 后备脚本(不确定这个粘贴服务代码是否会持续存在,所以我把它记下来以备后人使用),我从中获取了 QuickTime 的一个:
function IEhasQT() {
if (!window.ActiveXObject) return false;
try { if(new ActiveXObject("QuickTime.QuickTime")) return true; }
catch (e) {}
try { if (new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck')) return true; }
catch (e) {}
return false;
}
我测试了其他一些,但它们只是没有用 - 捕捉异常很重要。
如果您正在做我正在做的事情(QuickTime 回退到 gif 动画),您可能希望将视频的属性提供给图像(或您正在使用的任何其他内容)。这样做的缺点是您必须将它与 onscroll 以及 onload(或使用 Jquery)耦合,因为无论您如何尝试避免它,浏览器都可能在 DOM 加载之前尝试查找元素。
如果其他阅读本文的人正在寻找类似的答案,那么这样做的代码是
function noQTfallback() {
var vid1 = document.getElementById("<insert your object id>");
var vid1gif = document.createElement('img');
vid1gif.setAttribute("src","<insert your URL source>");
vid1gif.setAttribute("style",vid1.getAttribute("style"));
document.getElementById("<...>").replaceChild(vid1gif, vid1);
}
function IEhasQT() {
// as above
}
function checkQT() {
// as above
}
function QTbackup(){
if (!checkQT() && !IEhasQT()) {
noQTfallback();
}
}
window.document.body.onload = QTbackup;
window.onscroll = QTbackup;
奇怪的是,你可以安装多个版本的 QuickTime,我在 Windows 上的 Chrome 浏览器有 7 个副本......幸运的是,我有一个 Chromebook,它没有安装或可用的 QT 插件,所以我正在检查并看看什么有效为了区分它,这是我想出的最好的。
直到看到网上每个人的糟糕代码,我才明白为什么测试如此重要,难以置信。我知道没有人关心 IE,但基本的东西,比如||
而不是&&
让其他开发人员重复使用是不好的。
我已经在 Windows、Linux 和 Android(IE 和 Chrome)上进行了检查。这onscroll
有点跳跃,但没有 Jquery 或其他一些框架,我猜这是不可避免的(并且击败“不支持插件”!