Javascriptで、ユーザーがQuickTimeプラグインとJavaプラグインをインストールしているかどうかをテストするにはどうすればよいですか?
3 に答える
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
もちろん、これはIEでは機能しません。IEでプラグインをチェックする唯一の方法は、VBスクリプトを使用することであり、それは非常に奇妙で厄介です。テストできるのは特定のプラグインバージョンのみです。たとえば、「quicktime」ではプラグインはカットされません。5より古いバージョンでは公開されていないバージョンを指定する必要があり、バージョン7のリファレンスが見つかりません
上記の例では、質問の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')
より包括的で確実な方法、つまりプラグインの名前がなんらかの理由で変更される心配がないtype="video/quicktime"
場合は、オブジェクトがサポートされるかどうか(または使用していないかどうか)の最終的な答えであるMimeTypesの配列内を確認できます。 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アニメーションへのフォールバック)を行っている場合は、ビデオの属性を取得して画像(または使用している他のすべてのもの)に提供することをお勧めします。これの欠点は、ブラウザがDOMがロードされる前に要素を見つけようとする傾向があるため、onscrollとonload(またはJqueryを使用)に結合する必要があることです。
これを読んでいる他の誰かが同様の答えを探しているなら、そうするためのコードは
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つのコピーがあります...幸いなことに、QTプラグインがインストールされていないか利用できないChromebookがあるので、何が機能するかを確認しています。それを区別するために、これは私が思いついた最高のものです。
このオンラインでみんなのひどいコードを見るまで、なぜテストがそれほど重要なのか理解できませんでした。IEを気にする人は誰もいないことは知っていますが、||
代わりのような基本的なこと&&
は、他の開発者が再利用できるように横になっておくのは悪いことです。
これをWindows、Linux、Android(IEとChrome)で確認しました。はonscroll
少しジャンプしますが、Jqueryやその他のフレームワークがなければ、それは避けられないと思います(そして、「プラグインはサポートされていません」を打ち負かします!