0

私は次のコードを持っていますabc.jsp

 <% 
 out.write("<script type=\"text/javascript\" src=\"scripts/test.js\"></script>");
 out.write("Here is filename"+sfl);
 out.write(""
        + "<input type=\"button\" id=\"playBt\" value=\"Play Now\" onClick=\"playSound()\" >"
        + "<audio id=\"sound\" preload=\"auto\">"
        + "<source src=\"music.ogg\" type=\"audio/ogg\" />"
        + "<source src=\"music.mp3\" type=\"audio/mpeg\" />"
        + "Your browser does not support the audio element."
        + "</audio>"
      );
out.write("");
%>

次に、上記のコンテンツがフレームに取り込まれましたindex.jsp

 <iframe id='bgframe' style='display:compact;' src='abc.jsp' width="400" height="200"></iframe>

この JavaScript 関数が使用されるようになりました -test.js

function playSound() {  
  var frameRef = document.getElementById('bgframe');
  var sound = frameRef.contentWindow.document.getElementById'sound');
  //var sound = frameRef.contentDocument.document.getElementById('sound');
  sound.play();
}

問題は、再生ボタンをクリックしても音が再生されないことです。JavaScript コンソールでは、システムは の値として null を返しますframeRefcontentDocumentまた、 と のどちらを使用するかによって、次のエラーが発生しますcontentWindow

Uncaught TypeError: Cannot read property 'contentDocument'
Uncaught TypeError: Cannot read property 'contentWindow'

さまざまなソリューションを実装しましたが、キャッチされない typedef エラーが残ります。

ここで何が間違っているのか、どうすれば修正できますか? frame の要素にアクセスできないのはなぜid=bgframeですか?

4

1 に答える 1

1

test.jsinabc.jspではなくinを含めているindex.jspため、iframe を参照する必要はありません。スクリプトは既にその中で実行されているためです。playSound()関数にいくつかの変更を加えるだけで済みます。

function playSound() {  
  var sound = document.getElementById('sound');
  //do your stuff here
  //line below should make your script alert 'auto' in your case
  alert(sound.preload); 
}
于 2013-04-14T16:13:07.303 に答える