人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【WebページのBGM】
ある自作のWebページが
・Internet Explorer、
・Firefox
ではBGMが聞こえるのですが、
・Chrome(同一PC)
ではBGMが聞こえませんでした。

その自作のWebページのBGM付けと自動スクロールは、ある音楽サイト(※1)の
あるページ(※2)のhtmソースコードに倣って2008年1月に作成しました。

現在、Chrome でその(※2)を試してみると、BGMは聞こえます。
Chrome の公開時期は2008年12月12日で上記2008年1月は公開前でした。
現在の(※2)ではChrome向け対応済みの様子です。

そこで現時点の(※2)に倣ってその自作のWebページを書き変えると、
Chrome でもBGMが聞こえるようになりました。

以下の質問者補足欄の図に示す新旧スクリプトを見較べて、
なぜGoogle Chrome で聞こえるようになったのかが理解できません。
JavaScriptに詳しい方の解説をお願いいたします。

(※1)
●llerrah社
http://llerrah.com/index.html
(※2)
●New Year Wishes
http://llerrah.com/newyearwishes.htm
(最初少しだけ手動でスクロールすればあとは自動スクロールします)


●質問者: mkonomi
●カテゴリ:インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

質問文本文では「はてな記法」が使用できないのでこの欄に示します。
2008年1月
f:id:mkonomi:20130226103322j:image

2013年2月(現在)
f:id:mkonomi:20130226103321j:image

なお、音声ファイルは同一フォルダに存在します。


1 ● a-kuma3
ベストアンサー

f:id:a-kuma3:20130226111445j:image
最後の else が Google Chrome で動くところですが、embed タグの src 属性の指定でイコールの前後に空白が入っているのが駄目だったんだと思います。
IE だと、HTML の解釈が緩いのでこんな書き方でも動いたはずですが、厳密には src 属性が指定されていないと解釈されるはずです。


mkonomiさんのコメント
さっそくの回答ありがとうございました。

mkonomiさんのコメント
試してみましたが、違うようです。 (1)NGの方のスクリプトで document.write( '<embed src = "SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); のsrcの次の=の前後のブランクを取り去って document.write( '<embed src="SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); にしましたが、音声を聞くことができません。 さらに、SomeMusic.midの前後の"も取り去って document.write( '<embed src=SomeMusic.mid autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); にしてみましたが、それでも音声は聞くことができません。 実験に際しては、その都度,F5キーを押してリフレッシュしました。 (2)逆に、OKの方のスクリプトで document.write( '<embed src=SomeMusic.mid autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); のsrcの次の=前後にわざとブランクをいれて、SomeMusic.midの前後に"も入れて document.write( '<embed src = "SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); にしても音声を聞くことができています。 こちらでも、実験に際しては、その都度,F5キーを押してリフレッシュしました。 NGの方のスクリプトでは else if (navigator.appVersion.indexOf("Win") > 0) は何の判定をしているのですか? chromeはここでYESになっているのではありませんか? 《仮 説》 ブラウザがchromeの場合、 document.writeln("<BGSOUND src=SomeMusic.mid LOOP=INFINITE VOLUME=-500>"); では音声が出ないが document.write( '<embed src = "SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); では音声が出ると仮定するとつじつまが合うのですが・・・

rouge_2008さんのコメント
indexOf()で指定した文字列を検索して、見つかった場合はその位置を、見つからなかった場合は「-1」を返します。 http://www.ajaxtower.jp/js/string_class/index14.html UserAgentは「navigator.userAgent」で取得できます。 ※Google Chrome最新版は、「Mozilla/5.0 (Windows NT ***) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22」のような結果を返します。(WindowsのバージョンはOSによって異なります。) ※IE 9.0の場合は「Mozilla/5.0 (compatible; MSIE 9.0; Windows NT ***; Trident/5.0)」のような結果を返しますが、インストールされている.NET Frameworkのバージョンなど環境によって異なる情報も続きます。 古い方のコードでは、2番目の条件の「Win」が見つかってしまった為「&lt;BGSOUND ?&gt;」が出力されているのだと思います。

a-kuma3さんのコメント
ご推察の通りのようです。 http://www.pori2.net/js/navigator/1.html Google Chrome だと、以下の値を返しそうです。 >|txt| navigator.appName --> Netscape navigator.appVersion --> 5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.218 Safari/535.1 navigator.userAgent --> Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.218 Safari/535.1 ||< appVersion の Windows NT に、indexOf("Win") が反応してます。 BGSOUND タグは、IE 独自のタグなので、Google Chrome が解釈できない、と。 新しい方の書き方では、userAgent から、ブラウザを表す文字を探しているので、正しく動作する、ということですね。 # すみません、引っ掻き回しただけでした <tt>(^^</tt>ゞ

mkonomiさんのコメント
> 《仮 説》 > ブラウザがchromeの場合、 > document.writeln("<BGSOUND src=SomeMusic.mid LOOP=INFINITE VOLUME=-500>"); > では音声が出ないが > document.write( '<embed src = "SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); > では音声が出ると仮定するとつじつまが合うのですが・・・ 《実 験》 <SCRIPT language=JavaScript> document.writeln("<BGSOUND src=SomeMusic.mid LOOP=INFINITE VOLUME=-500>"); </SCRIPT> でブラウザがchromeの場合音声が出ない。 <SCRIPT language=JavaScript> document.write( '<embed src = "SomeMusic.mid" autostart="true" HEIGHT=1 WIDTH=1 loop="true" ></embed>' ); </SCRIPT> でブラウザがchromeの場合音声が出る。 よって、上記仮説は実験的に証明できました。 注: 上記 <SCRIPT などは実際は半角英字です。

mkonomiさんのコメント
すみません。新たな質問ですが、 Firefoxの場合、新旧どちらのコードでもBGMが聞こえるのはどのように説明できますか? 新コードでは最初のifがYESですが、旧コードではどこに該当しますか?

a-kuma3さんのコメント
手持ちの Firefox(ちょっとだけ、古い) で、それぞれの値を確認しました。 >|txt| userAgent : Mozilla/5.0 (Windows NT 6.0; rv:18.0) Gecko/20100101 Firefox/18.0 appName : Netscape appVersion : 5.0 (Windows) ||< 旧いコードでも、最初の if 文にマッチして、type が指定された embed タグが展開されると思います。

mkonomiさんのコメント
a-kuma3さん コメントありがとうございました。 わざわざ確認していただいてお手数をおかけしました。 おかげさまで、全体が納得でき、すっきりしました。

mkonomiさんのコメント
以下のコードを3つのブラウザ ・Internet Explorer、 ・Mozilla Firefox ・Google Chrome で実際に実行して納得できました。 ご指導ありがとうございました。 (この欄の表示のために全角で記述しましたが、実際は半角英字です) ──── <html> <head> <title>navigator.appName/appVersion/userAgent</title> </head> <body bgcolor=”green”> <hr> <font size=5 color=”yellow”>navigator.appName = <br></font> <font size=5 color=”white”> <script type=”text/javascript”>document.write(navigator.appName);</script> </font> <hr> <font size=5 color=”yellow”>navigator.appVersion = <br></font> <font size=5 color=”white”> <script type=”text/javascript”>document.write(navigator.appVersion);</script> </font> <hr> <font size=5 color=”yellow”>navigator.userAgent = <br></font> <font size=5 color=”white”> <script type=”text/javascript”>document.write(navigator.userAgent);</script> </font> <hr> </body> </html> ────
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ