今天为一个flash的问题搞了半天,flash在页面中点不开js的提示框,如果单是这一个问题,那我立刻就能确定问题所在,一定是allowScriptAccess这个属性有问题,可是同时还存在另一个问题,我的flash中的链接换成_self或_parent就没反应了,我随即将解决问题的焦点放在了flash上,找了半天,也没发现什么异常,最后抱着先解决js交互的问题的想法改了allowScriptAccess,谁知链接的问题也被修复了,我开始思考,为什么呢?于是找到这个属性的手册,原来问题出在Target属性上。
先说这个属性的一般特性。
比如:<param name="allowScriptAccess"value="sameDomain"/>
value参数说明:
always 允许随时执行脚本操作。
never 禁止所有脚本执行操作。
samedomain 只有在 Flash 应用程式来自和 HTML 页相同的域时才允许执行脚本操作。
所有 HTML 发布模板使用的默认值均为 samedomain。
使用 allowscriptaccess 使 Flash 应用程式可和其所在的 HTML 页通信。此参数是必需的,因为 fscommand() 、getURL()、ExternalInterface.call(),甚至navigateToURL()都可能导致 JavaScript 使用 HTML 页的权限,而该权限可能和 Flash 应用程式的权限不同。这和跨域安全性有着重要关系。
也就是说如果swf在A.rangerch.com下,不过页面在B.rangerch.com下,想用getURL或fscommand调用页面中的js是不能的,除非你将value设置为always。特别是navigateToURL和getURL,当它们的第二个参数不是_blank时(_self,_parent,_top),也被定义了与js交互一样的安全限制,即也需要设置allowScriptAccess!
这下搞清楚了,想一下,其实Adobe的工程师们这么做也是有道理的。
下面是Flash文档中的解释,已经很详细了:
ActionScript 3.0 编程
Flash Player 安全性 > 控制对主机网页中脚本的访问
控制对主机网页中脚本的访问
通过使用以下 ActionScript 3.0 API 可实现外出脚本访问:
•flash.system.fscommand() 函数
•flash.net.navigateToURL() 函数(当指定 navigateToURL("javascript: alert('Hello from Flash Player.')" 等脚本访问语句时)
•flash.net.navigateToURL() 函数(当 window 参数设置为"_top"、"_self"或"_parent"时)
•ExternalInterface.call() 方法
对于本地运行的 SWF 文件,仅当 SWF 文件和包含该文件的网页(如果存在)位于受信任的本地安全沙箱中时,才能成功调用这些方法。如果内容位于只能与远程内容交互的沙箱或只能与本地文件系统内容交互的沙箱中,则对这些方法的调用将失败。
HTML 代码中用于加载文件的 AllowScriptAccess 参数控制能否从 SWF 文件内执行外出脚本访问。
在 HTML 代码中为承载 SWF 文件的网页设置此参数。可以在 PARAM 或 EMBED 标签中进行设置。
AllowScriptAccess 参数可以有 "always"、"sameDomain" 和 "never" 这三个可能值中的一个:
•当 AllowScriptAccess 为"sameDomain"时,仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问。这是 AVM2 内容的默认值。
•当 AllowScriptAccess 为"never"时,外出脚本访问将始终失败。
•当 AllowScriptAccess 为"always"时,外出脚本访问将始终成功。
如果未在 HTML 页面中为 SWF 文件指定 AllowScriptAccess 参数,则默认为 AVM2 内容的"sameDomain"。
下面是一个在 HTML 页面中设置 AllowScriptAccess 标签的示例:
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'>
<param name='AllowScriptAccess' value='never'/>
<param name='src' value=''MyMovie.swf'/>
<embed name='MyMovie.swf' pluginspage='http://www.adobe.com/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' AllowScriptAccess='never'/>
</object>
AllowScriptAccess 参数可以防止从一个域中承载的 SWF 文件访问来自另一个域的 HTML 页面中的脚本。对从另一个域承载的所有 SWF 文件使用 AllowScriptAccess="never" 可以确保位于 HTML 页面中的脚本的安全性。
有关详细信息,请参阅《ActionScript 3.0 语言和组件参考》 中的以下条目:
•flash.system.fscommand() 函数
•flash.net.navigateToURL() 函数
•ExternalInterface 类的 call() 方法
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/RangerCH/archive/2009/09/01/4507925.aspx
分享到:
相关推荐
`lv_shiyan.html`中会设置`allowScriptAccess`属性,允许Flash与HTML页面的JavaScript进行通信。 在实际应用中,这种交互方式可以实现诸如用户登录、数据提交、实时聊天等多种功能。通过深入理解Flash和ASP的交互...
JavaScript 可以通过这些对象的属性和方法与 Flash 进行交互,如 `getVariable` 和 `setVariable` 方法。 3. **Flash 发布设置**: 为了使 Flash 能够与 JavaScript 通信,需要在 Flash 的发布设置中启用 "Allow ...
本案例“Flash与JS交互案例”展示了如何在网页中使SWF(Flash影片)与JavaScript进行数据交换,从而实现更丰富的用户体验。 首先,让我们了解Flash中的`ExternalInterface` API。这是Adobe Flash Player提供的一种...
### flash与Java交互的方法 #### 一、概述 在Flash与Java交互的过程中,核心机制是通过Flash Player提供的`ExternalInterface`类实现ActionScript方法与容器(例如网页浏览器)中的JavaScript或ActiveX代码之间的...
- 由于跨域限制,Flash与HTML交互需要设置正确的`AllowScriptAccess`参数。 - Web服务和WebSocket通信可能涉及跨域策略,需要配置CORS(跨源资源共享)。 - 注意性能优化,避免频繁的网络请求,合理缓存数据。 ...
- 性能:过多的Flash与JavaScript交互可能影响页面性能,合理设计交互频率和数据大小。 总之,"Flash与JavaScript的互联实例"展示了如何通过ActionScript和JavaScript之间的桥梁实现更高级的交互功能,这在Web开发...
- **跨域安全**:由于同源策略限制,只有与包含Flash内容的页面位于同一域下的JavaScript才能与Flex进行交互。跨域安全可以通过在Flash内容的SWF标签中添加`allowScriptAccess`属性来解决,如`<embed ...
3. 性能:过多的Flash与JavaScript通信可能会影响页面性能,因此应合理设计通信频率和数据量。 总结,Flash与JavaScript的通信是一个强大且灵活的技术,它使得网页内容能够实现更丰富的交互效果。理解并熟练掌握...
1. Flash参数与变量:通过`flashvars`、`params`和`attributes`对象,你可以传递Flash所需的各种参数,如`quality`、`wmode`、`allowScriptAccess`等,以及自定义变量。 2. 动态插入:SWFObject可以动态地在页面加载...
本篇将详细探讨如何实现Flash与JavaScript的交互通信。 首先,Flash和JavaScript之间的通信主要有两种方式:`ExternalInterface`和`FlashObject`。 1. **ExternalInterface**: - `ExternalInterface`是AS3...
2. **参数设置**:在`<object>`标签内,可以设置各种参数,如`movie`(指定SWF文件路径)、`width`和`height`(设定Flash的尺寸)、`allowScriptAccess`(允许脚本访问)等,这些参数可以控制Flash的行为和交互性。...
标题中的“在页面读取flash的js”指的是利用JavaScript与Flash交互的技术,目的是在网页上以Flash动画的形式展示内容,例如图片新闻。这种技术在早期的网页设计中常见,因为Flash能够提供丰富的视觉效果和互动体验,...
- 由于安全限制,Flash与JavaScript的交互只能在同源策略下进行。确保Flash文件(如`wavplayer.swf`)与包含它的HTML页面位于同一个域名下。 - 有时,浏览器的Flash插件可能会阻止JavaScript访问Flash,尤其是隐私...
1. **设置Flash与JavaScript的交互**: 在Flash ActionScript中,我们需要启用ExternalInterface并添加一个方法来报告加载进度。例如,可以创建一个名为`reportProgress`的方法,该方法接受加载百分比作为参数。...
例如,使用`allowScriptAccess`属性可以控制Flash与JavaScript的交互,限制潜在的XSS攻击。 综上所述,尽管Flash曾是网页开发的重要工具,但其安全问题不容忽视。随着Flash的逐渐淘汰,开发者应转向更安全的技术,...
4. **编程交互**:通过编程接口(如C++的成员函数)可以控制Flash的播放、暂停、停止等行为,甚至与Flash内容进行数据交换。例如,你可以调用`Play()`方法启动动画,`Stop()`方法停止动画,`SetVariable()`方法传递...
在C#中,我们可以利用Adobe提供的Flash Player ActiveX控件或第三方库来实现与Flash的交互。ActiveX控件允许开发者在Windows Forms或WPF应用程序中嵌入Flash内容,通过COM接口与Flash Player进行通信。以下是一些...
在Web开发的历史上,Flash曾是创建动态内容、视频播放和复杂用户界面的主要工具之一,而JavaScript则是实现网页交互性的主要语言。两者之间的相互调用使得开发者能够利用各自的优势,实现更丰富的网页功能。 ### JS...
**JavaScript与Flash交互**: 通过Flash的ActionScript和JavaScript之间的Bridge,可以实现两者间的交互。例如,你可以在Flash中定义一个函数,然后在JavaScript中调用它,或者从JavaScript向Flash传递数据。 **...
这可以通过`ExternalInterface`类实现,它允许Flash与JavaScript进行通信。 ```actionscript if (ExternalInterface.available) { ExternalInterface.addCallback("copy", copyToClipboard); } else { trace(...