2016-01-13 126 views
0

我正在Meteor为客户端构建一个音频播放器。ReferenceError:未定义音频

当我尝试创建音频对象时出现错误。我使用下面的代码。任何想法为什么发生这种情况?任何帮助将不胜感激。

// Define Audio 
song = new Audio('/audio/waitforme.mp3'); 

// Define Play 
play = $('#playicon'); 

$(function() { 
$('#playicon').on("click", function() { 
e.preventDefault(); 
song.play(); 
}) 
}); 


ReferenceError: Audio is not defined 
    at AlannaSite.js:2:14 
    at AlannaSite.js:12:4 
    at /Users/CorrinSite/.meteor/local/build/programs/server/boot.js:242:10 
    at Array.forEach (native) 
    at Function._.each._.forEach (/Users/AriKamin/.meteor/packages/meteor-  tool/.1.1.9.1sd3e7j++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11) 
    at /Users/CorrinSite/.meteor/local/build/programs/server/boot.js:137:5 
+0

实际上它最初设置为音频()而不是音频(),并且该错误仍然存​​在。 – 91Kamin

+0

然后用正确的错误信息和正确的代码编辑你的问题。事实上,唯一的答案就是那一个。 – Kaiido

+0

好吧,改变它。获取与音频相同的错误而不是“音频”。 – 91Kamin

回答

3

我认为这里有一个误解。你有正确的代码,但它运行在不同的上下文中。

就流星而言,NodeJS后端也在运行您的'客户端'代码。不幸的是,NodeJS不支持您使用的音频API,但您的浏览器确实如此。

此代码在客户端和服务器端提供服务并运行可能会让人有点混淆,无法知道客户端+服务器之间的线路,特别是当Meteor尝试模糊这些线路时!

我会查找流星的架构,以便您可以最好地构建您的代码,以针对'客户端'和'后端'环境。一篇伟大的文章在这里:https://www.discovermeteor.com/blog/what-goes-where/

基本上,Meteor提供了两个目录,您可以使用这两个目录来专门定位客户端或服务器。您可以将文件放在/client/server,它将被处理。

对于快速或在上下文中使用的文件,Meteor文档解释了一个名为Meteor.isClientMeteor.isServer的布尔标志,您可以使用它来标记仅在客户端/服务器端运行的代码: http://docs.meteor.com/#/basic/Meteor-isClient

+0

很酷。我不知道Meteor.isClient/isServer是所有函数所必需的(大多数情况下只是在helpers和pub/sub之前使用它)。肯定会放下它,然后关闭它的问题,如果它的工作。 – 91Kamin

+1

是的,删除了错误。谢谢! – 91Kamin