• ベストアンサー

IEでのみ作動しないJavaScriptがあり困っています

自分のサイトでFLV動画を流したいのですが、動画の再生にはFlashPlayer8以上が必要です。 そこで、Dreamweaverが自動で挿入してくれるスクリプトでプレイヤーの有無とバージョンを確認し、 無い又は8未満の場合にはアドビのダウンロードページへ誘導できるようにしました。 しかし、IE(確認したのは6)でのみ作動してくれません。 Firefox、Safari、Operaでは問題なく動きます。 何か解ることがあれば教えて下さい。 よろしくお願いいたします。 問題のスクリプトを以下に示します。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>検出試験</title> <script type="text/javascript"> function MM_CheckFlashVersion(reqVerStr,msg){ with(navigator){ var isIE = (appVersion.indexOf("MSIE") != -1 && userAgent.indexOf("Opera") == -1); var isWin = (appVersion.toLowerCase().indexOf("win") != -1); if (!isIE || !isWin){ var flashVer = -1; if (plugins && plugins.length > 0){ var desc = plugins["Shockwave Flash"] ? plugins["Shockwave Flash"].description : ""; desc = plugins["Shockwave Flash 2.0"] ? plugins["Shockwave Flash 2.0"].description : desc; if (desc == "") flashVer = -1; else{ var descArr = desc.split(" "); var tempArrMajor = descArr[2].split("."); var verMajor = tempArrMajor[0]; var tempArrMinor = (descArr[3] != "") ? descArr[3].split("r") : descArr[4].split("r"); var verMinor = (tempArrMinor[1] > 0) ? tempArrMinor[1] : 0; flashVer = parseFloat(verMajor + "." + verMinor); } } // WebTV has Flash Player 4 or lower -- too low for video else if (userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 4.0; var verArr = reqVerStr.split(","); var reqVer = parseFloat(verArr[0] + "." + verArr[2]); if (flashVer < reqVer){ if (confirm(msg)) window.location = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"; } } } } </head> <body onload="MM_CheckFlashVersion('8,0,0,0','このページのコンテンツを表示するには最新バージョンの Adobe Flash Player が必要です。今すぐダウンロードしますか?');"> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
noname#172317
noname#172317
回答No.2

こんにちは。 上記だと、IE判定が弱いようです。 --- isOpera: function () {return !!window.opera} isSafari: function () {return navigator.userAgent.indexOf("Safari") != -1} isNetscape: function () {return navigator.appName.charAt(0) == "N" && !this.isSafari()} isNN6: function () {return !!document.getElementById && this.isNetscape()} isIEchk: function () {return !!document.all && !this.isNetscape() && !this.isOpera()} ▲それぞれ true or false が入ります▲ function MM_CheckFlashVersion(reqVerStr,msg){ with(navigator){ var isIE = this.isIEchk; (※以下省略※) } --- 動作検証済です。こちらで、いかがでしょう?

noname#157189
質問者

お礼

書き込みありがとうございます。 No.1の方のところにも書きましたとおり、自分はまだjavascriptをきちんと理解できていません。 どこをどう直したらよいかもわかりせん。 ただ、せっかく詳しく書いていただいたので、「わかりません」だけでは失礼と思い、参考書やサイトをみて頑張ってみました。 しかし、やはり今の自分には理解できるものではありませんでした。 見ず知らずの者のためにスクリプトまで書いていただいたのに、すみません。 また、色々調べていくうちにwindowsだけはjavascriptではなく、ActiveXを使うと説明しているサイトがあったり、余計にわからなくなってしまいました。 しかし、示していただいたスクリプトなら作動検証済みということなので、IEも含めてそれ単体で問題なく作動するのですよね。 図々しくて気が引けるのですが、もしよろしければ実際にはこう書くとうのを見せていただくことはできませんでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

if (!isIE || !isWin){ の条件で IEの場合跳ねられてしまうようですけど ・・・ IEの場合に実行させたい部分はどこなのでしょう

noname#157189
質問者

お礼

書き込みありがとうございます。 実は、ここの一番下にある説明の通り、ソフトウェアが自動的に挿入してくれるスクリプトなので、自分自身よくわかっていないのです。 http://www.adobe.com/jp/devnet/dreamweaver/articles/dw10seminar_konzo_03.html 自動挿入なので、てっきり完璧なものなのだと思っていたのですが、IEだけは動かないので困ったなと。 そもそもjavascript自体勉強を始めたばかりで、せっかくご指摘いただいたのに、それを理解すらできなくて申し訳ありません。 もう少し頑張って勉強します。

すると、全ての回答が全文表示されます。

関連するQ&A