EMBEDをファイル名入力で再生したい



0   名前: ガイア : 2006/08/19(土) 12:29  ID:DSQfMiUT
フォームからファイル名を直接<EMBED>タグに入力して
音楽を再生させたいのですが、曲が初期に設定したファイルから
変更されません。

ファイル名の入力は上手くいっていると思うのですが
<EMBED>に入力されてないみたいなのです?

アドバイスをよろしくお願いします。

<HTML>
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/html; CHARSET=shift_jis">
<SCRIPT LANGUAGE="JavaScript">
<!--
function song(){
              url=document.aa.cc.value;
              document.aa.bb.value="mose/"+url+".mp3";
              document.emb.SRC="mose/"+url+".mp3";
                }

function music_play(){    emb.play();        }
function music_stop(){    emb.stop();        }
function music_pause(){   emb.pause();       }
//-->
</SCRIPT>
</HEAD>
<BODY>
<CENTER>

<FORM NAME="aa">
<INPUT TYPE="text" name="bb" value="入力の確認">
<INPUT TYPE="text" name="cc" value="ファイル名入力"><BR>
<INPUT TYPE="button" VALUE="変更" onClick="song()">
</FORM>

<EMBED NAME="emb" AUTOSTART="false" HIDDEN="true" SRC="mose/sample.mp3">

<FORM ID="form1">
<INPUT TYPE="button" VALUE="PLAY"     onClick="music_play()">
<INPUT TYPE="button" VALUE="STOP"     onClick="music_stop()"><BR>
<INPUT TYPE="button" VALUE="一時停止" onClick="music_pause()"><BR>
</FORM>
</CENTER>
</BODY>
</HTML>


1   名前: sevi- : 2006/08/19(土) 12:29  ID:PQukhZTw
コード内で音楽再生を担当させるコンポーネントのIDが指定されてない為、
ブラウザの種、ブラウザで標準再生コンポーネントとされている設定によって
実際に文書上で配置される再生コンポーネントが異なる事になってしまっている.

で、そういった根本的な問題を抜いて現象を説明すると、
IEで展開すると、標準では再生はMediaPlayerとなる.
MediaPlayerで再生対象を指定するプロパティ名は確かFileNameだったと記憶
している.なのでemb.FileName="URL";と指定してやれば、一応解決はする.

デフォルトで設定したsrcが読み込まれるのは最初に再生コンポーネントが
読み込まれた際、値が初期値としてインターフェースを通して渡されるからだと
推測される.

再生コンポーネントを指定しない書き方は本来すべきでは無いが、そういった
書き方を前提とした場合、たとえば以下のように実装されたコンポネントの
プロパティを全て検索し、ファイル名に該当するだろうものを特定し
設定させるという手法が考えられる.

が、むろんこのような手法は基本的に勧められない.

sevi-

	function song()
	{
		url=document.aa.cc.value;
		document.aa.bb.value="mose/"+url;
		var src_old = emb.src.toUpperCase();
		for(var i in emb)
		{
			if(i.toUpperCase()=="OUTERHTML" || typeof(emb[i]) == "function" || emb[i] == null)
				continue;
			if(new String(emb[i]).toUpperCase().replace(/\\/g, "/").indexOf(src_old)==-1)
				continue;
			try
			{	
				emb[i] = "mose/"+url;
			}
			catch(ex)
			{
				continue;
			}
		}
	}

一覧へ戻る