分类: AS/Flex/AIR

用Flash按钮解决跨浏览器使用剪贴板的复制功能

以前有一个比较完美解决网页上复制按钮的方法,是通过JS调用SWF文件,让SWF文件做为一个中介来完成复制的功能(请看跨浏览器使用剪贴板),但最Adobe 发布了 Flash Player 10,一切就变了~,这个版本的 Flash Player 引入了不少新的安全特性,其中包括了对于一些敏感操作需要用户介入的内容。

新的 Flash Player 10 中,需要上载或下载数据、操作系统剪贴板的操作等都需要用户参与,也就是说要实现类似的“复制”功能,必须要让用户点击指定的按钮或设置快捷键才可以解决。这也就意味着之前可以自动操作剪贴板的 Flash 脚本都已失效了。于是乎,开心网啊,校内啊,他们的复制按钮都失效啦,提示复制成功,粘贴后却还是之前的内容。

像Google相册、YouTube的链接都是点击选中,需要用户Ctrl+C自行复制的,这也是一种解决方案,好过开心网那种提示成功却没成功~~

既然操作剪贴板的功能需要用户参与,那还是有解决方案的,做一个Flash的按钮让用户点击复制~~~

阅读全文 »

Flash里的9切片缩放,以及图片缩放类

CSS里有滑动门技术,使标签宽度自适应。

Flash里也有9切片缩放的选项,让圆角矩形在缩放时不会变形。普通的没有应用9切片的元件在进行了拉伸后会变形,见下图:

Flash里的9切片

通过设置9切片缩放,可以解决这个问题,在库里面,右击元件,选择属性,勾选启用9切片缩放比例辅助线(只有影片剪辑才可以应用9切片属性):

双击库面板里的元件打开编辑,在舞台上可以看到出现了9切片的辅助线,鼠标拖动辅助线调整好位置:

再看看舞台上原来那个进行拉伸的元件,现在不管如何拉伸变形,圆角都能保持原样不变形:

阅读全文 »

allowNetworking控制 SWF 文件对网络功能的访问

有同事说某个Flash的插件,放到Qzone,新浪等网站,Flash里的链接点击都不生效了,打开一看,果然。

然后用FireFox打开,点击链接,FlashPlayer报错:

SecurityError: Error #2146: 安全沙箱冲突:http://xxx/xxx.swf 不能调用 navigateToURL,因为 HTML/容器参数 allowNetworking 具有值 internal。
    at global/flash.net::navigateToURL()

然后查查allowNetworking是何方神圣,官网解释:

This HTML parameter governs a number of ActionScript APIs. It has the following possible values:
"all"—the default. No networking restrictions; player behaves normally.
"internal"—SWF files may not call browser navigation or browser interaction APIs, but may call any other networking APIs.
"none"—SWF files may not call any networking APIs, nor any SWF-to-SWF communication APIs.

allowNetworking

参数:

  • "all"(默认值)― SWF 文件中允许使用所有网络 API。
  • "internal"― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。
  • "none"― SWF 文件可能不调用浏览器导航或浏览器交互 API,并且它无法使用任何 SWF 到 SWF 通信 API。

可以控制 SWF 文件对网络功能的访问。调用被禁止的 API 会引发 SecurityError 异常。

当 allowNetworking 设置为 "internal" 时,以下 API 被禁止:

  • navigateToURL()
  • fscommand()
  • ExternalInterface.call()

当 allowNetworking 设置为 "none" 时,除了上面列出的那些 API 外,还会禁止以下 API:

  • sendToURL()
  • FileReference.download()
  • FileReference.upload()
  • Loader.load()
  • LocalConnection.connect()
  • LocalConnection.send()
  • NetConnection.connect()
  • NetStream.play()
  • Security.loadPolicyFile()
  • SharedObject.getLocal()
  • SharedObject.getRemote()
  • Socket.connect()

扩展阅读

AllowScriptAccess

参数:

  • sameDomain:仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问。这是 AVM2 内容的默认值。
  • never:外出脚本访问将始终失败。
  • always:外出脚本访问将始终成功。

AllowScriptAccess 参数可以防止从一个域中承载的 SWF 文件访问来自另一个域的 HTML 页面中的脚本。
对从另一个域承载的所有 SWF 文件使用 AllowScriptAccess="never" 可以确保位于 HTML 页面中的脚本的安全性。

allowFullScreen

参数:

  • 启用全屏模式设置为"true",否则设置为"false"(默认值)
  • 仅当在响应鼠标事件或键盘事件时才会调用启动全屏模式的 ActionScript。如果在其它情况中调用,Flash Player 会引发异常。
  • 在全屏模式下,用户无法在文本输入字段中输入文本。所有键盘输入和键盘相关的 ActionScript 在全屏模式下均会被禁用,但将应用程序返回标准模式的键盘快捷键(例如按 Esc)除外。
  • 当内容进入全屏模式时,程序会显示一条消息,指导用户如何退出和返回标准模式。该消息将显示几秒钟,然后淡出。
  • 如果某个调用方与 Stage 所有者(主 SWF 文件)没有位于同一安全沙箱,则调用 Stage 对象的 displayState 属性会引发异常。
  • 管理员可以通过在 mms.cfg 文件中设置 FullScreenDisable = 1 对浏览器中运行的 SWF 文件禁用全屏模式。
  • 在浏览器中,必须在 HTML 页面中包含 SWF 文件,才能进入全屏模式。
  • 在独立的播放器或放映文件中始终允许全屏模式。

AS3使用HTTPService类访问需要HTTP Basic Authentication认证的URL

在使用API的时候,如嘀咕、Twitter、饭否的API,会需要使用用户名和密码登录,一般都是使用HTTP Basic Authentication认证,使用HTTPService类访问这种URL时,需要设置headers,用户名和密码的格式为“username:password”,并且需要Basic64加密,具体代码如下。

import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.Base64Encoder;
import mx.rpc.http.HTTPService;
URLRequestDefaults.authenticate = false;//设默认为false,否则用户较验错误时会弹出验证框

private var result:XML;
private function initApp():void
{
	var base64enc:Base64Encoder = new Base64Encoder;
	base64enc.encode("user:password"); //用户名和密码需要Base64编码
	var user:String = base64enc.toString();

	var http:HTTPService = new HTTPService;
	http.addEventListener(ResultEvent.RESULT,resultHandler);//监听返回事件
	http.addEventListener(FaultEvent.FAULT,faultHandler);     //监听失败事件
	http.resultFormat = "e4x";//返回格式
	http.url = "http://api.digu.com/statuses/friends_timeline.xml"; 以嘀咕网的API为列
	http.headers = {"Authorization":"Basic " + user};
	http.send();
}
private function resultHandler(e:ResultEvent):void
{
	result = XML(e.result);
	test.dataProvider = result.status;//绑定数据
}
private function faultHandler(e:ResultEvent):void
{
	//处理失败
}

Air学习笔记,窗体常用操作

HTML窗体对象:window.nativeWindow

.visible [true|false]
隐藏/显示窗体,隐藏一个窗体将取消窗体的显示以及相关的任何栏图标

.maximize()
最大化窗体

.minimize()
最小化窗体

.close()
关闭窗体

.restore
还原窗体

.startResize()
改变窗体大小,当该方法在mouseDown 事件里调用时,大小改变是由鼠标确定的,当系统接收到mouseUp事件则停止大小调整。

.startMove()
移动窗体