如何在 Flash 中访问 cookie?
Posted
技术标签:
【中文标题】如何在 Flash 中访问 cookie?【英文标题】:How do I access cookies within Flash? 【发布时间】:2010-09-11 16:41:06 【问题描述】:我希望在 Flash 电影中获取同一域的 cookie 值。这可能吗?
让我们看看我让用户设置一个变量 foo 并使用任何 Web 编程语言存储它。我可以通过该语言轻松访问它,但我想通过 Flash 电影访问它,而不是通过在 html 页面中打印来传递它。
【问题讨论】:
【参考方案1】:如果您只想存储和检索数据,您可能希望使用 SharedObject 类。有关详细信息,请参阅Adobe's SharedObject reference。
如果您想访问 HTTP cookie,您需要使用 ExternalInterface 与 javascript 对话。我们在这里的做法是创建一个名为 HTTPCookies 的帮助器类。
HTTPCookies.as:
import flash.external.ExternalInterface;
public class HTTPCookies
public static function getCookie(key:String):*
return ExternalInterface.call("getCookie", key);
public static function setCookie(key:String, val:*):void
ExternalInterface.call("setCookie", key, val);
您需要确保使用 Flash 对象中的“allowScriptAccess”参数启用 javascript。
然后你需要创建一对javascript函数getCookie和setCookie,如下(感谢quirksmode.org)
HTTPCookies.js:
function getCookie(key)
var cookieValue = null;
if (key)
var cookieSearch = key + "=";
if (document.cookie)
var cookieArray = document.cookie.split(";");
for (var i = 0; i < cookieArray.length; i++)
var cookieString = cookieArray[i];
// skip past leading spaces
while (cookieString.charAt(0) == ' ')
cookieString = cookieString.substr(1);
// extract the actual value
if (cookieString.indexOf(cookieSearch) == 0)
cookieValue = cookieString.substr(cookieSearch.length);
return cookieValue;
function setCookie(key, val)
if (key)
var date = new Date();
if (val != null)
// expires in one year
date.setTime(date.getTime() + (365*24*60*60*1000));
document.cookie = key + "=" + val + "; expires=" + date.toGMTString();
else
// expires yesterday
date.setTime(date.getTime() - (24*60*60*1000));
document.cookie = key + "=; expires=" + date.toGMTString();
在您的 Flash 项目中拥有 HTTPCookies.as 并从您的网页加载 HTTPCookies.js 后,您应该能够从 Flash 电影中调用 getCookie 和 setCookie 来获取或设置 HTTP cookie。
这仅适用于非常简单的值 - 字符串或数字 - 但对于更复杂的值,您确实应该使用 SharedObject。
【讨论】:
flash代码究竟是如何获取js getCookie()调用的返回值的呢?您的 AS 代码中没有 return 语句。它应该只返回 ExternalInterface 调用的结果吗?【参考方案2】:我相信 Flash 对象具有可通过 javascript 访问的功能,因此如果没有更简单的方法,您至少可以使用 javascript onload 处理程序并将 document.cookie 从外部传递到您的 Flash 应用程序。
更多信息在这里:http://www.permadi.com/tutorial/flashjscommand/
【讨论】:
【参考方案3】:您可以从闪存读取和写入 cookie(本地共享对象)。 Flash cookie 存储在您的 PC 上以您的域名称命名的目录中。这些目录位于:
[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\
这个来自 Adobe 的 article 是一个好的开始。
【讨论】:
请注意,共享对象不是 cookie,它们的工作方式大致相同,但 SharedObjects 是特定于 Flash 的。【参考方案4】:一些谷歌搜索表明可以使用query strings 来完成:
对于网络应用,你可以通过 通过 url 参数将值转换为 swf,以及 (带有 swf 内的动作脚本)保存 将它们放到沙盒中。
【讨论】:
【参考方案5】:cookie 可通过 document.cookie 用于 javascript - 尝试使用 flash 的 getURL 调用 javascript 函数。
getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');
【讨论】:
【参考方案6】:HTTPCookies.as 中的getCookie 方法应使用“return”语句。
import flash.external.ExternalInterface;
public class HTTPCookies
public static function getCookie(key:String):*
return ExternalInterface.call("getCookie", key);
public static function setCookie(key:String, val:*):void
ExternalInterface.call("setCookie", key, val);
【讨论】:
【参考方案7】:我晚了 10 年。如果你可以在页面中嵌入你需要的数据,那么抓取起来会容易 10 倍。
import flash.net.*
var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://***.com');
_loader.addEventListener(Event.COMPLETE, _onComplete);
_loader.load(_req);
function _onComplete(e:Event):void
var wantedData:RegExp = /<div class="cool-data">(.*?)</div>/ig;
var result:Object = wantedData.exec(String(_loader.data));
trace(result[0].split('<div class="cool-data">').join('')
.split('</div>').join(''));
【讨论】:
以上是关于如何在 Flash 中访问 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flash 中为 MovieClip 分配属性并在 Flex 中访问它们?
Action Script 3. 如何在 Flash 中访问 Movie Clip 中的按钮?