【问题标题】:Flash AS3 SoundMixer Sandbox Violation?Flash AS3 SoundMixer 沙盒违规?
【发布时间】:2011-03-11 14:38:26
【问题描述】:

我在一个较大的文件中加载了一个 AS3 预加载电影,该文件使用 SoundMixer 来控制音量。当两个文件在同一台服务器上时,一切都在本地和在线运行良好。

但是,当我拆分文件时,假设将加载程序 swf 放在一台服务器上,将较大的内容放在另一台服务器上,当我单击音量按钮时,我收到此错误。 (这个错误实际上是在测试加载器 swf 时输出的,从在线服务器加载内容。)

Security Sandbox Violation
SecurityDomain 'http://www.onlinedomain.com/content.swf' tried to access incompatible context 'file:///LocalDisc/WORK//loader.swf'
SecurityError: Error #2070: Security sandbox violation: caller http://www.onlinedomain.com/content.swf cannot access Stage owned by file:///LocalDisc/WORK//loader.swf.
    at flash.media::SoundMixer$/set soundTransform()
    at content_fla::MainTimeline/stopSound()
    at content_fla::MainTimeline/soundMenuHandler()

我已将crossdomain.xml 文件添加到允许访问的两台服务器。

在我的 content.swf 中处理声音的函数是:

import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;

function soundMenuHandler(event:MouseEvent):void {
    if (sound == "ON") {
        sound_btn.gotoAndStop(3);
        stopSound();
    } else {
        sound_btn.gotoAndStop(1);
        playSound();
    }
}

function playSound():void {
    sound = "ON";
    SoundMixer.soundTransform = new SoundTransform(1);
}

function stopSound():void {
    sound = "OFF";
    SoundMixer.soundTransform = new SoundTransform(0);
}

问题似乎是因为 SoundMixer 访问了loader.swf。有谁知道发生了什么以及如何解决这个问题?

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    file:///LocalDisc/WORK//loader.swf 听起来您正在本地测试。要在本地进行测试,您可以在 Flash 安全管理器中禁用文件或文件夹的安全检查:

    http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

    【讨论】:

    • 感谢您的回复。是的,我在本地进行测试只是为了能够在 Flash IDE 中看到输出跟踪。
    • 我这样做只是为了查看 Flash IDE 中的错误输出。问题是当我在线运行文件时,每个文件都来自不同的服务器,内容文件确实加载但立即停止工作,因为调用了 startSound 函数并且发生了安全违规。
    • 获得了一个链接,我可以在其中看到正在发生的错误并查看 crossdomains.xml?
    • 抱歉耽搁了,感谢您的浏览。非常感谢。似乎是与 SoundMixer 有关的问题。 infin8design.com/clients/testlocal loader 和 loadee 文件都保存在同一台服务器上。声音切换按钮有效。 infin8design.com/clients/testremote 一台服务器上的加载程序和另一台服务器上的加载程序。声音切换按钮不起作用。如果我在使用 2 个远程服务器时使用这行代码,则加载者会冻结。 SoundMixer.soundTransform = new SoundTransform(1);文件在这里。 infin8design.com/clients/sound.zip 谢谢
    • 抱歉回复晚了。我下载了您的文件并进行了快速测试。您在 infin8design 上的 loader.swf 从 www.crooks.co.uk 加载 loadee.swf 文件,因此我检查了该域上的 crossdomain.xml:crooks.co.uk/crossdomain.xml。这导致我出现 404。所以我检查了您是否不小心将跨域放置在 infin8design 服务器上,而您确实做到了。因此,要解决您的问题,您需要将跨域文件添加到 crooks.co.uk 根目录并允许从 infin8design.com 访问该文件。
    【解决方案2】:

    修复您的嵌入代码存在跨域问题 还要确保您的 crossdomain.xml 符合标准并已交付

    allowscriptaccess = "sameDomain";
    allownetworking = "all";
    

    【讨论】:

      【解决方案3】:

      找到解决方案!

      虽然 crossdomain.xml 策略文件确实包含此域(所以我不确定它为什么不起作用)。我可以通过将此代码添加到加载程序文件来显式授予访问权限。

      Security.allowDomain("www.loadeedomain.com");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多