0

尝试从我们的 CDN 加载 Soundmanager2 的 SWF 文件。我假设我遇到了跨域闪存问题。有人做过吗?甚至有可能吗?

这就是我正在尝试的...

var allowxdomainscripting = true;
var xdomain = "*";
soundManager.url = 'http://cdn.mycompany.com/inc/soundmanager2.swf';

在文档中有一个非常模糊的引用,但它很模糊......

http://www.schillmania.com/projects/soundmanager2/doc/generated/src/SoundManager2_AS3.html

任何帮助表示赞赏。

4

2 回答 2

3

非常感谢!

在浪费了几个小时试图让 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

问候!

于 2013-05-30T20:53:43.647 回答
3

我曾经也遇到过这个问题。SoundManager2 现在带有 swf 文件的跨域版本。

它们被压缩在 swf/soundmanager2_flash_xdomain.zip

https://github.com/scottschiller/SoundManager2/tree/master/swf

只需解压缩并替换为 SoundManager2 提供的标准 .swf 文件,您的问题就会消失。

于 2012-06-04T22:01:49.193 回答