Javascript 尝试在Firefox加载项中播放声音时出现安全错误?

Javascript 尝试在Firefox加载项中播放声音时出现安全错误?,javascript,html,audio,firefox-addon-sdk,Javascript,Html,Audio,Firefox Addon Sdk,我是Firefox插件开发的新手,尝试在插件中播放声音时遇到问题 这是一个用于计时的附加组件。用户可以通过面板配置会议设置(持续时间、参与者等)。有一个工具栏。它包含几个按钮(开始、下一步、停止、添加参与者)和一个框架(显示有多少参与者尚未发言)。计时器倒计时时,我将document.border.style属性从“绿色”更改为“红色” 这个很好用。但是当document.border.style属性变为“橙色”然后变为“红色”时,我被要求让我的加载项播放声音,我无法让它工作 我试过几种方法:

我是Firefox插件开发的新手,尝试在插件中播放声音时遇到问题

这是一个用于计时的附加组件。用户可以通过面板配置会议设置(持续时间、参与者等)。有一个工具栏。它包含几个按钮(开始、下一步、停止、添加参与者)和一个框架(显示有多少参与者尚未发言)。计时器倒计时时,我将
document.border.style
属性从“绿色”更改为“红色”

这个很好用。但是当
document.border.style
属性变为“橙色”然后变为“红色”时,我被要求让我的加载项播放声音,我无法让它工作

我试过几种方法:

1-为必须播放的每个声音向计时器变量添加属性/属性(我不知道在该上下文中使用哪个术语是正确的,无论如何,可能两者都有)。在我的代码中的含义:

orangeBorderStyle: new Audio(relativePathToMyMp3orWAVFile),
redBorderStyle: new Audio(relativePathToMyMp3orWAVFile),
然后在倒计时()方法中调用他们的play()方法。但它不起作用

2-目前,我正在尝试播放添加到frame.url HTML文件中的HTML5音频标签中的声音。但它也不起作用

HTML文件如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Frame</title>
</head>
  <body>
<script type="text/javascript" src="../javascript/Frame_script.js"></script>
    Speakers Left : <input id="speakers" size="4" value="" disabled />
    <audio id="orangeSound" src="Audio/orangeBorderSoundTest.mp3" type="audio/mpeg">
            Your browser does not support the audio element.
    </audio>
    <audio id="redSound" src="Audio/redBorderSoundTest.mp3" type="audio/mpeg">
            Your browser does not support the audio element.
    </audio>
 </body>
</html>
在Timers.js中,我有以下调用:

Frame.get().postMessage("orangeBorderSound", Frame.get().url);
Frame.get().postMessage("redBorderSound", Frame.get().url);
这两个调用都会触发正确的代码(当console.log()被注释掉时,它们会正确显示),但最后没有声音

请注意,ID为“speakers”的输入标记的
在我的加载项中正确显示,因此document.getElementById()方法似乎返回了正确的结果,这是使用输入标记执行操作的正确方法。也就是说,路径是正确的。我不明白为什么音频标签会有所不同

所以我的问题来了:我现在在错误控制台中看到错误“安全错误:moz nullprincipal的内容:…可能无法加载或链接到资源…”(给定的资源路径似乎是每个音频文件的正确路径)

这真的是一个安全问题吗?或者我会不会有一些改变来让我的代码正常工作?你会怎么做

如有任何解释或建议,将不胜感激。我真的不明白我所做的有什么不对。为什么会造成安全问题

请注意,我尝试在一个新的附加组件中使用audio tags方法,只在面板中使用了一个Play按钮,其他什么都没有,但是这次使用了面板contentURL HTML文件中的audio tags,调用contentScriptFile中的Play()方法,效果很好

这次没有安全错误

但是我想我不能在计时插件中接受这样的解决方案,因为我需要将play()方法的调用与边框样式的更改同步,而且这次没有play按钮。这与我想要得到的不符。这只是为了测试

my lib目录中的Timers.js无法与data目录中的Panel contentScriptFile交互,因此即使声音已正确加载并准备播放,它也不能成为解决方案


我做错了什么?

我的问题还没有解决。如果您认为有必要,请随时询问更多信息。我不知道如何处理这个安全错误,因为我不知道是什么原因造成的。我的问题仍然没有解决。如果您认为有必要,请随时询问更多信息。我不知道如何处理这个安全错误,因为我不知道是什么原因造成的。
Frame.get().postMessage("orangeBorderSound", Frame.get().url);
Frame.get().postMessage("redBorderSound", Frame.get().url);