非常感谢!
在浪费了几个小时试图让 SM2 SWF 嵌入工作之后,我完全偶然地偶然发现了这个答案。
我将“恢复”它以添加一些关键字,以便谷歌索引这个答案......也许下一个尝试在跨域环境中嵌入 SoundManager2 SWF 的人会比我做得快一点:)
我在闪存初始化时遇到的错误是:错误调用 NPObject 上的方法
在 JS 方面,这是破坏一切的代码:
// attempt to talk to Flash
flash._externalInterfaceTest(false); <- KABOOM!
NPObject 错误可能有很多含义,但通常(在我们的环境中)它意味着:您试图通过 JS 在托管在不同域上的 Flash 电影上调用 ExternalInterface。
过了一会儿,我打开了 SoundManager2 ActionScript 3 代码,看到了这个:
public var allow_xdomain_scripting:Boolean = false;
public var xdomain:String = "*";
[... other stuff ...]
if (allow_xdomain_scripting && xdomain) {
Security.allowDomain(xdomain);
version_as += ' - cross-domain enabled';
}
当然,这意味着您可能正在使用的电影(无论是否调试)将无法从不同的域(CDN 或其他)访问。
正如@amlutz160 的回答中所述,解决方案是使用 swf/soundmanager2_flash_xdomain.zip 中包含的文件,这些文件是使用 allow_xdomain_scripting = true 编译的。
发布这个很尴尬,解决方案很明显,但是我为此浪费了很多时间,而且 AFAIK 那个神秘的 zip 文件的内容没有记录在任何地方(我在 SM2 论坛上发现了一个切题的提及)。
PS:我将此答案转发给Scott Schiller,所以也许他可以稍微更新一下 SoundManager2 文档:P
问候!