加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash与js跨域调用

发布时间:2020-12-15 18:23:20 所属栏目:百科 来源:网络整理
导读:flash与js跨域调用 之前用aflax调用网页js一直比较正常,今天将aflax移到另一个域名下再调用原来域名的js发现失败了。初步判断是跨域调用的权限问题。 在FLASH脚本调用处加上参数: param name="allowScriptAccess" value="always" / 在flash里加上: System

flash与js跨域调用

之前用aflax调用网页js一直比较正常,今天将aflax移到另一个域名下再调用原来域名的js发现失败了。初步判断是跨域调用的权限问题。

在FLASH脚本调用处加上参数:<param name="allowScriptAccess" value="always" />

在flash里加上:System.security.allowDomain("*");

问题得以解决。

allowScriptAccess

Flash Player 自版本 6 以来,一直支持一个称为 allowScriptAccess 的 HTML 参数。此参数用于控制是否允许 SWF 中的 ActionScript 在包含它的 HTML 页中调用 JavaScript。 (反之则不进行控制,即 JavaScript 调用受 System.security.allowDomain 控制的 ActionScript。)

allowScriptAccess 可能存在如下值:

  • always: 始终允许 ActionScript 调用 JavaScript
  • sameDomain: 仅当 SWF 和 HTML 页来自同一域时,才允许 ActionScript 调用 JavaScript
  • never: 从不允许 ActionScript 调用 JavaScript

在 Flash Player 6 和 7 中,allowScriptAccess 的默认值 (如果未由 HTML 页指定) 为“always”。需要单独说明的是,在 Flash HTML 发布模板中,allowScriptAccess 的默认值始终为“sameDomain”。如果不修改 Flash HTML 发布进程输出,那么您将会看到“sameDomain”行为,这是因为 HTML 页会为 Flash Player 指定“sameDomain”。

在 Flash Player 8 中,当 Flash Player 中的主 SWF 为 7 版或更早版本时,未指定的 allowScriptAccess 的默认值将始终为“always”,而当主 SWF 为 8 版或更高版本时,该默认值会变为“sameDomain”。

allowScriptAccess 参数允许 HTML 页包括 Flash 内容,但禁止它在 HTML 页中执行脚本。当 HTML 页源自它可能并不信任的 Flash 内容时,这一点很有用。例如,如果您负责维护一个论坛,其中的用户可能会包括他们自己制作的 SWF 签名,并且生成的 HTML 将直接源自这些 SWF,那么您可能不希望这些 SWF 能够在您的 HTML 页中执行脚本。

下面是有关如何指定 allowScriptAccess 的示例:

<objectclassid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0"width="375" height="300" ? <param name="movie" value="hello.swf" ? <param name="allowScriptAccess" value="sameDomain" ? <embedpluginspage="http://www.macromedia.com/go/getflashplayer_cn"type="application/x-shockwave-flash"src="hello.swf"width="375" height="300" allowScriptAccess="sameDomain" ? </object ? allowDomain

从 Flash Player 8 开始,System.security.allowDomain() 接受单个星号“*”作为通配符。调用 System.security.allowDomain("*") 的结果是允许通过所有 域而非特定域中的其它 SWF 进行脚本访问。

如果您所在的环境中没有需要保护的敏感数据,并且您需要公开与其它域共享数据,则使用此通配符权限会很方便。但在调用 System.security.allowDomain("*") 之前,请确保调用 SWF 不包含需要保密或半保密的任何信息或 ActionScript 代码。调用 System.security.allowDomain("*") 后,来自 Internet 中任意位置的任意 SWF 都可以加载您的 SWF 并对其进行脚本处理,即便 SWF 由恶意作者编写时也是如此。

请注意,在以下情况中,您可能必须调用 System.security.allowDomain(),即在运行之前,您不知道提供协作 SWF 的域,这可能是因为协作 SWF 由负载平衡簇提供,或者是因为将在多个不同域中使用您的 SWF。在此情况下,请勿盲目调用 System.security.allowDomain("*")!如上所述,这将打开您的 SWF,从而完全允许 Internet 上的其它任何 SWF 对其进行脚本处理。请等至协作 SWF 加载完毕,然后使用 ActionScript property MovieClip._url 确定它的域。在将 _url 属性值传递给 System.security.allowDomain() 之后,引用的影片剪辑中的 SWF 应该能够对调用 System.security.allowDomain() 的 SWF 进行脚本处理。

Flash Player 8 允许任意版本的 SWF 向 System.security.allowDomain() 传递“*”。但如果您要在低于 8 版的 SWF 中调用 System.security.allowDomain("*"),那么在执行操作前,一定要测试播放器的版本 (System.capabilities.version) 看是否至少为 8,这是因为较早版本的 Flash Player 不会将“*”识别为 System.security.allowDomain 的参数。


另外还需要注意ActionScript代码设置:

AS2写法:System.security.allowDomain("*"); //针对不同http资源

? ? System.security.allowInsecureDomain("*"); //针对需要安全验证的资源

AS3写法:flash.system.Security.allowDomain("*");

? ?flash.system.Security.allowInsecureDomain("*");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读