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 作为 的值返回frameRef。此外,我收到以下错误,具体取决于我使用的是contentDocument还是contentWindow.

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

我已经实现了不同的解决方案,但未捕获的 typedef 错误仍然存​​在。

请问我在这里做错了什么,我该如何解决?为什么我不能访问 frame 上的元素id=bgframe

4

1 回答 1

1

您正在包括您的test.jsin abc.jsp而不是inindex.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 回答