想做一个基于 URL 的音频播放器,但 Javascript 不起作用

Posted

技术标签:

【中文标题】想做一个基于 URL 的音频播放器,但 Javascript 不起作用【英文标题】:Wanted To make a URL based Audio player, But Javascript is not working 【发布时间】:2016-04-29 05:53:56 【问题描述】:

我是 JS 新手。 我想做一个基于 URL 的音频播放器。 它应该通过在文本框中粘贴 mp3 url 来工作,然后单击 go 播放 mp3。但它什么也没做。我的代码有什么问题?

<script type="text/javascript">
function audio
var url = document.getElementById('lol').value;
var innerhtml = "<audio controls><source type='audio/mp3' src="+url+"/></audio>";
document.write(innerHTML);

</script>
<div id="lol">
<form>
<input type="text" id="lol"/>
<input type="submit" onclick="audio()" value="go"/>
</form>
</div>

【问题讨论】:

首先为div 删除id document.write 永远不要使用它。 developer.mozilla.org/en-US/docs/Web/API/Document/write 【参考方案1】:

您有两个 id 为“lol”的元素,并且您的脚本中可能存在函数定义错误。 试试这个,可能有用;)

<script type="text/javascript">
    function audio()
        var url = document.getElementById('lol').value;
        var innerHTML = "<audio controls><source type='audio/mp3' src="+url+"/></audio>";
        document.write(innerHTML);
    
</script>
<div id="lol1">
  <form>
    <input type="text" id="lol"/>
    <input type="submit" onclick="audio()" value="go"/>
  </form>
</div>

【讨论】:

【参考方案2】:

存在大量语法错误,建议您在脚本中使用 jsHint。

更正了double lol ids

删除了document.write(innerHTML)

删除了使用名称类似于方法 (innerHTML) 的字符串 (var innerHTML) 的整个尝试。我从不使用字符串来做标记,太容易搞砸了。

源的 cmets 中有更多详细信息。

片段

<!DOCTYPE html>
<html>

<head>
  <style>
    #url 
      width: 47ex;
    
  </style>
</head>

<body>
  <form>
    <p>Enter this url:</p>
    <code>http://glpjt.s3.amazonaws.com/so/av/balls.mp3</code>
    <br/>
    <br/>
    <input type="text" id="url" />
    <!--Use type="button" instead of "submit"-->
    <input type="button" onclick="audio()" value="go" />
  </form>
  <br/>

  <br/>
  <!--Have an empty div with an id if you plan to create an element -->
  <div id="box"></div>


  <script>
    function audio() 
      var url = document.getElementById('url').value;
      var box = document.getElementById('box');
      // Use createElement to make the audio and source element.
      // Trying to make markup with strings is prone to errors.
      var player = document.createElement('audio');
      // Set controls on audio player
      player.setAttribute('controls', true);
      var source = document.createElement('source');
      // When creating any element, you have to place them
      // into the DOM with appendChild
      player.appendChild(source);
      box.appendChild(player);
      // Assign the value of the input to the src of player.
      // Make sure to load() the player after assigning or changing src
      player.src = url;
      player.load();
    
  </script>
</body>

</html>

【讨论】:

【参考方案3】:

您的函数实现不正确。应该是:

function audio() 
  var url = document.getElementById('lol').value;
  var innerHTML = "<audio controls><source type='audio/mp3' src="+url+"/></audio>";
  document.write(innerHTML);

【讨论】:

【参考方案4】:

在 HTML 页面中,id 应该是唯一的,但您使用相同的 id 两次“lol”。 您的函数也会抛出语法错误,因为它不是函数定义语法。 应该是:

function audio()


【讨论】:

以上是关于想做一个基于 URL 的音频播放器,但 Javascript 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中播放来自 URL 的音频?

注入 src URL 后 HTML5 音频不播放

在 Audio Web API 中下载音频文件时播放

从 Parse.com 播放音频

哪个 API 从 ios 和 osx 中的缓冲区播放音频?

从 URL React Native 录制音频(广播流)