我正在为客户在Meteor中构建一个音频播放器。
我在尝试创建音频对象时遇到错误。我正在使用以下代码。知道为什么会这样吗?任何帮助将不胜感激。
// 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 :(得分:5)
我认为这里存在误解。您拥有正确的代码,但它在不同的环境中运行。
对于Meteor,NodeJS后端也在运行“客户端”代码。遗憾的是,NodeJS不支持您正在使用的音频API,但是您的浏览器不支持。
这个在客户端和服务器端服务并运行的代码可能会让客户端+服务器之间的界限变得有点混乱,特别是当Meteor试图模糊这些行时!
我会查看Meteor的架构,以便您可以最好地构建代码,以“客户端”与“后端”环境为目标。这里有一篇很棒的文章:https://www.discovermeteor.com/blog/what-goes-where/
基本上,Meteor提供了两个可用于专门定位客户端或服务器的目录。您可以将文件放在/client
或/server
中,然后系统会为您处理。
对于快速或两个上下文中使用的文件,Meteor文档解释了一个名为Meteor.isClient
或Meteor.isServer
的布尔标志,您可以使用它来标记仅在客户端上运行的代码-side / server-side:http://docs.meteor.com/#/basic/Meteor-isClient
答案 1 :(得分:1)
这将在服务器端编译:
if(typeof Audio != "undefined") {
// Browser-only code
}
答案 2 :(得分:1)
在带有钩子的 ReactJS 中,您还可以使用 Audio(HTMLElements) 的表达式:
if (TryConvert(DateInterval.Off, out TimeInterval timeInterval))
{
// Do something with your time interval
}
希望我能帮上忙:)