SWF 文件不能被本地访问 不能访问本地 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源

问题描述:

前几天帮朋友做了一个结婚的AR小软件,朋友运行后出现如下错误:

SecurityError: Error #2148: SWF 文件 file:///F:/AR/FLARManager_v1_0_3/bin-debug/FLARManagerExampleLauncher.swf无法接续 file:///F:/AR/FLARManager_v1_0_3/resources/flar/flarConfig.xml 。只有本地系统的SWF文件 以及被信頼的本地 SWF源文件才可接续。

at flash.net::URLStream/load()
at flash.net::URLLoader/load()
at com.transmote.flar.utils::FLARManagerConfigLoader/http://transmote.com/flar::loadConfigFile()[C:\Users\Could\Desktop\FLARManager_v1_0_3\src\com\transmote\flar\utils\FLARManagerConfigLoader.as:152]
at com.transmote.flar::FLARManager()[C:\Users\Could\Desktop\FLARManager_v1_0_3\src\com\transmote\flar\FLARManager.as:180]
at examples::FLARManagerExample_2D/onAdded()[C:\Users\Could\Desktop\FLARManager_v1_0_3\src\examples\FLARManagerExample_2D.as:39]
at flash.display::DisplayObjectContainer/addChild()
at FLARManagerExampleLauncher()[C:\Users\Could\Desktop\FLARManager_v1_0_3\src\FLARManagerExampleLauncher.as:18]

问题解决:

在C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust目录下添加一个文件,比如:myTrustFiles.txt(文件名可任意起),文件内容为:“F:\AR\FLARManager_v1_0_3\bin-debug\”即项目的路径,当然也可以设置为“F:\”

或者所以盘符都写上:

c:\
d:\
e:\
f:\

PS:以下是其他操作系统的解决方案

======================================================

说明:

为了让你的Flash在用户硬盘中拥有同时访问网络和本地的能力,你必须在用户计算机的FlashPlayerTrust目录中为你的Flash添加权限。转载请注明出处:hi.baidu.com/taotao5453

  • FlashPlayerTrust 配置文件。这些是列出受信任路径的简单文本文件。这些文件由可执行的安装程序创建。当安装程序将 SWF 安装到用户的计算机时, 它能够安装信任的配置文件并指定 SWF 是受信任的。当该做法没有表现用户显式决定每个受信任的 SWF 时, 该用户已通过运行安装程序将信任隐式给予它, 毕竟它是可执行程序。Flash Player 可识别以下两个位置的信任配置文件: 影响计算机所有用户的位置和只影响当前用户的位置。所有用户位置需要操作系统级别的管理权限。这些位置如下:
    • Windows 所有用户:<系统 › \Macromed\Flash\FlashPlayerTrust

      (例如 c:\WINNT\system32\Macromed\Flash\FlashPlayerTrust)

    • Windows 单个用户:<应用程序数据 › \Macromedia\Flash Player\#Security\FlashPlayerTrust

      (例如 c:\Documents and Settings\fred\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)

    • Mac OS 所有用户:<应用程序支持 › /Macromedia/FlashPlayerTrust

      (例如 /Library/Application Support/Macromedia/FlashPlayerTrust)

    • Mac OS 单个用户:<应用程序数据 › /Macromedia/Flash Player/#Security/FlashPlayerTrust

      (例如 /Users/fred/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)

      -Lunix 用户

    • For single-user (replace <user> with actual username):
      /home/<user>/.macromedia/Flash_Player/#Security/FlashPlayerTrust
    • For all users on the machine:
      /etc/adobe/FlashPlayerTrust/

    Google Analytics在SWFAddress下检测不完整的问题

    问题描述:
    denizen中国站:http://cn.denizen.com/denizen-china/#/home
    Google分析只能追踪到/denizen-china/,#符号后面都追踪不到。

    问题分析与解决:
    追踪代码是放在</body>标记前,代码如下:

    <script type="text/javascript">

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-18173256-1']);
    _gaq.push(['_trackPageview']);

    (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? ' https://ssl' : ' http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();

    </script>

    因为位置比较靠后,可能和其他js有冲突,所以把这段追踪代码提到最前。
    发现还是不行,把

    _gaq.push(['_trackPageview']);

    改为

    _gaq.push(['_trackPageview', document.location.pathname + document.location.hash.replace("#/","")]);

    还可以把

    <script type="text/javascript" src="js/swfaddress.js"></script>

    改为

    <script type="text/javascript" src="js/swfaddress.js?tracker=pageTracker._trackPageview"></script>

    大功告成。

    跨SWF安全沙箱引起的类型转换问题

    问题描述:
    今天做Denizen Hello,用的是Gaia框架,LoadingPage调用IndexPage中的MapPainter类型的对象出现如下错误:
    TypeError: Error #1034: 强制转换类型失败:无法将 com.couldhll.bitmaptext::MapPainter@24f793a1 转换为 com.couldhll.bitmaptext.MapPainter。

    问题分析:
    检查LoadingPage和IndexPage中的类型,确认都是com.couldhll.bitmaptext.MapPainter类型。
    但是IndexPage中是MapPainter@24f793a1类型,而LoadingPage中是MapPainter类型。
    开始怀疑IndexPage中有问题,但是无果。偶尔在Main.as中使用MapPainter类型的对象后,一切正常。

    问题解决:
    其实我们都知道Loader.load()后面一个参数是安全命名空间参数,要设置成:SecurityDomain.currentDomain。
    在Gaia中,可以在site.xml中为page设定domain="current"。
    本例如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <site title="Hello" menu="true">
        <page id="index" src="index.swf" domain="current" >
            <page id="nav" src="nav.swf" depth="top" domain="current" >
                <page id="loading" title="Loading" src="loading.swf" menu="true" domain="current" />
       <page id="home" title="Home" src="home.swf" menu="true" domain="current" />
            </page>
        </page>
    </site>

    Tuio某些环境下localhost引发不能接连的问题

    问题描述:
    这次,AMG7辆车的发布会在松江天马山的赛车场。今天做部署,AMG多触点软件Tuio不能接连问题。
    在公司的测试环境(Windows2008,Flash10)一切正常。而现场环境(Windows7,Flash10)Tuio显示连接不到。

    问题分析:
     首先想到的是环境问题,把当场环境中的flash版本用360升级到最新,还是不行。

    问题解决:
    在一切没有办法的时候,咨询了下PQ的孙健,在尝试很多方法后,终于,把Tuio的连接地址从localhost改成127.0.0.1,一切安逸了。。。

    Flash某些环境下会卡的问题

    问题描述:
    这次,AMG7辆车的发布会在松江天马山的赛车场。今天做部署,AMG多触点软件有卡的问题。
    在公司的测试环境(Windows2008,Flash10)一切正常。而现场环境(Windows7,Flash10)有些部分会卡。

    问题分析:
    首先,找卡部分的共同点:
    一个是全屏的一个video,是通过flash.media.Video做的。
    一个是MovieClip,这个影片剪辑在加载图片的时候运行。
    这两个共同点都有video,查了一下代码,没有什么问题。
    然后发现只有全屏会卡,不全屏一切正常。
    因为MovieClip时候在加载图片,考虑到性能问题,所以把MovieClip的play设置为加载图片完毕。 改好后,MovieClip好了。

    问题解决:
    在一切没有办法的时候,咨询了下公司里的其他同事,Dainel说是flash的设置问题。flash-右键-属性-显示-启动硬件加速-勾去掉。一切安逸了。。。