

いつもお世話になっております。
よろしくお願いします。
ホームページを作っているのですが、AというページからBというページに切り替えるときに、4秒くらいの効果音を鳴らしたいです。
私が調べたやり方は
方法1:ページAにある、Bへのリンクをクリックしたときにその音を鳴らす
方法2:ページBで、1回だけその音を鳴らす
という2つの方法でした。
実際やってみると、以下の点が不満でした。
方法1だと、音が鳴り終わるまでまってからページが切り替わってしまう。
方法2だと、他のページからBに行ったときも毎回音が鳴る(これが相当鬱陶しい)。
出来れば上記不満を解消するいいやり方を教えてもらいたいのです。きっとJavaScriptを使ったやり方でいい方法があるはずと思うのですが、ピッタリ来るものを探しきりませんでした。
どなたかご教授ください。
No.3ベストアンサー
- 回答日時:
●サンプル1
javascriptでreferrer(リンク元)がページAだった場合のみ音を鳴らす方法です。
当然、javascriptの可否に依存します。またreferrerをブロックされていたりなどもありえます。
※ページAのファイル名が「pageA.html」、音声ファイルが「sound.wav」と仮定。
---------------
<html>
<head>
<bgsound id="enter_sound" loop="1">
<script type="text/javascript">
<!--
function PageEnter() {
var pageAURL = "pageA.html"; ★ページAのファイル名
var prevURL = document.referrer;
if (prevURL.slice(-(pageAURL.length)) == pageAURL) {
enter_sound.src="sound.wav"; ★音声ファイル名
}
}
-->
</script>
</head>
<body onload="PageEnter()">
~~~
</body>
</html>
---------------
●サンプル2
ANo.2 の方もおっしゃっている方法で、javascriptで特定のパラメーターつきでアクセスされた場合のみ音を鳴らす方法です。ページAからじゃなくても自由に制御できます。
サンプル1同様、javascriptの可否に依存します。
このページへのリンクで、「<a href="pageB2.html?sound">~</a>」などと末尾に「?sound」を付けると音が鳴る。付けなければ鳴らない。
---------------
<html>
<head>
<bgsound id="enter_sound" loop="1">
<script type="text/javascript">
<!--
function PageEnter() {
var param = location.search;
if (param == "?sound") {
enter_sound.src="sound.wav"; ★音声ファイル名
}
}
-->
</script>
</head>
<body onload="PageEnter()">
~~~
</body>
</html>
---------------
●サンプル3
javascriptもCGIスクリプトも使わない方法としては、フレームを使う方法が考えられます。ANo.1の方の案と似ていますが、音を鳴らしたい場合だけフレームつきでアクセスさせる、という方法です。これもページAからじゃなくても自由に制御できます。
音を鳴らしたい場合は以下のページにリンクし、鳴らしたくない場合は直接ページBにリンクする。
---------------
<html>
<head>
<bgsound src="sound.wav" loop="1"> ★音声ファイル名
</head>
<frameset cols="100%">
<frame src="pageB.htm" frameborder="0"> ★ページBのファイル名
</frameset>
</html>
---------------
回答ありがとうございます。
皆さんの回答を見て、テストしてみました。
#2さん、#3さんの提示されているパラメータ、
#3さんの提示されているリンク元がページAだった場合のやり方を実際やってみました。
前者はうまくいきましたが、ページBにあるメニューから他のページ(例えばページC)を見た後、CにあるリンクでページBに戻る分にはうまくいきました!
ところがブラウザの「戻る」で戻る場合には音が鳴らされるのが継続されてしまいました。そこが残念です。
後者はなぜかうまくいきませんでした。
ページAからページBへのリンクはMAPタグを使って画像の一部をクリックする方式でしたので、その辺に不都合があるのかと思って、普通のハイパーリンクを作って試してもうまくいかず、IEのステータスバーにエラーのびっくりマークがつきます。
じつは後者の方法が1ページだけの編集で済むので、一番よさそうだと思っていたのですが・・・。私の編集がまずかったのでしょうか?
何か思い当たる節があればご指導ください。
No.6
- 回答日時:
エラーの件とは別に、念のため捕捉しておきます。
「音を鳴らすかどうか」の判断方法は別として、「音を鳴らす方法」自体は、ブラウザに依存するので注意が必要です。
具体的に言えばタグの対応状況が違います。
たとえばbgsoundタグは確かIE専用、標準HTML的に推奨されるのはobjectタグだと思いますが、プラグインなどに依存したり埋め込み方が面倒であったりします。
embedタグは、標準HTML的には推奨されないかもしれませんが、とりあえず実現したい場合、少しでも多くの環境でおそらく無難、というのを踏まえるなら、選択肢の一つだと思います。
ちなみに、bgsoundタグをそのままの形式でembedに置き換えるだけで使えると思います。
また、サンプルを試したところ、Win+IEでは問題なく動作しました。ただしreferrerはローカル環境では正常に機能しない場合があるので、サーバーにアップロードして試してみてください。
No.5
- 回答日時:
> 後者はなぜかうまくいきませんでした。
サンプル1のことですよね?
> IEのステータスバーにエラーのびっくりマーク
この、びっくりマークをダブルクリックすると、エラーの内容が表示されますか?
その内容を教えてください。
また、できればHTMLソース(head部分だけでも)も見せていただけると何か分かるかもしれません。
この回答への補足
何度もありがとうございます。
取り急ぎエラーの内容だけ伝えさせて頂きます。
ライン:9
文字:1
エラー:オブジェクトを指定してください
コード:0
です。
ソースはほとんどいただいたものと同じです。
掲載してもかまわないと思ったのですが、うまくいかなくて一旦削除した状態にしてしまったので、意味が無いかなと思います。
Body部分に背景をランダムに変えるJavaScriptがある位で、後は特別何をしているという事もないページです。
No.4
- 回答日時:
pagea.htm にて、
<a href="./pageb.htm?test">ページB</a>
として、
pageb.htm に於いて
<script type="text/javascript"><!--
if(window.self.location.search=="?test"){
alert("ページAから呼ばれました。");
}
// -->
</script>
とする事で処理の分岐は出来ます。
あとは document.write で音を出す処を書き出す様にするなり
#1の方がフレームで行おうとしていた事をページBだけで行う事も出来ます。
まぁCGIでもないのにパラメータがアドレスにあり
気になるかもしれませんが。
尚、それこそHTMLなのでアドレスに文字が付加されているだけで他に何も影響はありません。
とりあえずWIN XP SP2 での IE6.0, Mozilla1.7.5, Opera7.54u2 で検証しました。
回答ありがとうございます。
おまけに動作検証まで・・・。本当にありがとうございます!
#3の方の例にも書きましたとおりブラウザの「戻る」を使った場合ずっとパラメータが残る(のかな?)のが課題となってしまいました。
#1さんの仰るフレームは、別の理由で出来れば使いたくはないんですよね・・・。
No.2
- 回答日時:
技術的に一番簡単なのが、
Bその2 というページを作る事です。
BとBその2はほぼ同じ物で音がするかしないかが違うだけです。
これでAからはBその2を呼び、他からはそれまでのBを呼べば音が鬱陶しいのは回避できます。
欠点は更新が面倒・・・。まぁ音の仕掛けを除いて丸ごとコピーですが。
次はCGIの利用。
といっても、実質Aから呼ばれた時とそれ以外から呼ばれた時に別のHTMLを書き出す様にするだけで、中身は上記のBその2を用意するのと同じ。
ただCGIからの書き出しなので元ネタは1つで済むので更新がラク。
欠点はCGIの知識と環境が必要。
CGIを使わせてもらえないサーバもありますし・・・。
その次はJavaScript。呼び出すAでフォームでパラメータ付きでBを呼び出し、
Bで自分のアドレスを解釈してパラメータを判別し
Aから呼ばれたと振り分けられた時に音を鳴らす。
欠点は、javascriptが無効だと振り分けられない。
まぁお勧めは最初の2つ用意する事です。
とにかく簡単ですし・・・。
回答ありがとうございます。既に2件もついているなんて・・・。
2つのページを用意するやり方は、ページ構成上ブラウザの「戻る」を使用される可能性が高いので、せっかくご提案いただきましたがちょっと採用できないです。
残念ながらCGIも使えないのです。
3つ目のやり方がいいなあと思うのですが、それを自力で組み上げる技術は無い状況です。どこかにちょっと加工すればすみそうなサンプルなどございませんでしょうか?質問の上に質問を重ねてすみません。
No.1
- 回答日時:
以前に同じようなことをやりました。
その時はフレームを使いました。
つまり別々のフレームなら非同期に動作します。
まず音専用のフレームを用意します(見えないように)。
これの中身は簡単です。
<html>
<head>
<bgsound id="bgm" src="" loop=1>
</head>
</html>
そしてAページのBへのリンクをクリックしたタイミングで、JavaScriptで次のようにします。
window.top.f1.bgm.src = "audiofile";
f1は音専用のフレーム名です。
audiofileに再生するファイルを指定します。
こんなんでどうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PowerPoint(パワーポイント) you tubeにパワポで作った動画を投稿する方法 1 2023/04/09 22:56
- 雑誌・週刊誌 のり付けされている雑誌の解体方法 3 2023/03/15 21:38
- 学校 大学の科目を教えている先生を変えたい 2 2022/04/26 16:32
- Word(ワード) wordでセクションを区切っているのに、ページ番号の設定が連動してしまいます。対応を教えてください! 2 2022/05/25 12:36
- 楽器・演奏 電子ピアノの音が鳴る時と鳴らない時と最大音量で鳴らない時がある。なぜ? 電子ピアノY-115を持って 2 2022/09/04 06:01
- 楽器・演奏 へ音記号の楽譜を読めるようになりたいので、ト音記号との音階の音域の違いを知りたいです。 3 2023/08/14 14:15
- スピーカー・コンポ・ステレオ pcとSwitchでスピーカーを使うときについて三つ質問があります 4 2023/04/03 23:58
- その他(ブラウザ) Edge、Chrome、FireFoxのパスワード記憶機能 2 2023/08/16 16:25
- Visual Basic(VBA) 複数ページあるPDFファイル内の文字列等の情報をキーにPDFをグループ分け分割したい。 2 2022/06/25 09:51
- 学校 いつも授業中にお腹が鳴ってしまいます。 朝ごはんをしっかり食べても3、4限目にはお腹が鳴ります。 休 1 2022/05/09 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リンク先のテキストボックスへ...
-
一つのリンクに複数のURLを指定
-
リンク先を2つ表示させる
-
ボタンを押した回数を表示するには
-
タイトルバーを非表示にできま...
-
ブラウザの右上にあるボタンを...
-
htmlから<a>でpdf表示時にpdf資...
-
HTMLからフォルダを開きたい
-
Excelで、社外秘(閲覧のみ)と...
-
ソースの追加行数と変更行数
-
iPadの標準ブラウザでローカルH...
-
リンク先からリンク元の、同じ...
-
テキストエディタvscodeでプロ...
-
どのページもすべて同じURLなの...
-
htmlファイルの表示が真っ白
-
絶対パスのルートをサブディレ...
-
Webサイトから、txtファイルを...
-
HTMLメール内のコメント
-
httpdで接続が拒否される
-
ゲームプログラマーになるため...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つのリンクに複数のURLを指定
-
ブラウザの右上にあるボタンを...
-
行番号を指定したリンク
-
リンク先のURLが毎日変わる場合...
-
リンク先を2つ表示させる
-
タイトルバーを非表示にできま...
-
ページ切り替え時に音を鳴らし...
-
小さいHTMLの画面を出したい
-
objectタグで埋め込んだHTMLの...
-
ステータスバーに文字列を表示...
-
日時によって変化する背景
-
数カ所のフォームボタンにonMou...
-
htmlから<a>でpdf表示時にpdf資...
-
リンク先のテキストボックスへ...
-
一つのリンクで、複数のウィン...
-
現在開いているWEBページを...
-
大きさを指定して新しいウィン...
-
ツールバーやボタンのないページ
-
ボタンをクリックしたときに、...
-
ウィンドウのツールバーを非表示
おすすめ情報