Internet Explorer で Adobe Reader のバージョン7、8、9を検出する方法
以前の記事で、“現在の手法では「バージョン 7 と 8 を区別することが技術的に不可能」らしい”と書きましたが、実は当時から Adobe Reader 7 以降のバージョンを区別する方法が明らかにされていたようです。
最近とある仕事の関係で、その方法を知る機会があったので、記事に起こしておくことにしました。
エッセンスは次のとおりです。ポイントは GetVersions() のところですね。
version = new window.ActiveXObject('AcroPDF.PDF').GetVersions();
上記の結果、version には例えば次のような文字列が入ります。
Accessibility=9.1.0,AcroForm=9.1.2,Annots=9.1.2,Checkers=9.1.0,
DigSig=9.1.2,DVA=9.1.0,eBook=9.1.0,EScript=9.1.2,HLS=9.1.0,IA32=9.1.0,
MakeAccessible=9.1.0,Multimedia=9.1.0,PDDom=9.1.0,PPKLite=9.1.2,
ReadOutLoud=9.1.0,reflow=9.1.0,SaveAsRTF=9.1.0,Search=9.1.2,SendMail=9.1.0,
Spelling=9.1.0,Updater=9.1.0,weblink=9.1.0,
この結果は Adobe Reader 9.1.2 のものです。version の中には複数の機能のバージョンが含まれているようです。
もう少し細かい話としては、例えば次のようなコードで Adobe Reader のメジャーバージョンを取り出すことができます。
control = new ActiveXObject(control_text);
version = control.GetVersions().split(",");
version = version[0].split("=");
version = parseFloat(version[1]);
途中の version[0] は上にあげた文字列の Accessibility=9.1.0 が入っているはずですので、バージョン番号の最下位まで見るのには不適切なコードになっています。
なお、この方法で分かるのは Internet Explorer のアドオンとして利用できる Adobe Reader のバージョンです。
ActiveX を利用しているため、上記のコードのままで使うと IE 以外ではエラーが出ると思われます。
最後に、参考にさせていただいたウェブページを記載しておきます。詳しいサンプルコードが掲載されているので、当記事は読み飛ばしても、リンク先を読み込むことをお勧めします。
・Detecting plugins in Internet Explorer (and a few hints for all the others)
・Opening a PDF Reader with Javascript and ActiveXObject : Javascript, ActiveXObject, IE
| 固定リンク
