我希望在 Flash 电影中获取同一域的 cookie 值。这可能吗?
让我们看看我让用户设置一个变量 foo 并使用任何 Web 编程语言存储它。我可以通过该语言轻松访问它,但我想通过 Flash 电影访问它,而不是通过在 HTML 页面中打印它来传递它。
我希望在 Flash 电影中获取同一域的 cookie 值。这可能吗?
让我们看看我让用户设置一个变量 foo 并使用任何 Web 编程语言存储它。我可以通过该语言轻松访问它,但我想通过 Flash 电影访问它,而不是通过在 HTML 页面中打印它来传递它。
如果您只想存储和检索数据,您可能需要使用 SharedObject 类。有关详细信息,请参阅Adobe 的 SharedObject 参考。
如果要访问 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 对象具有可通过 javascript 访问的功能,因此如果没有更简单的方法,您至少可以使用 javascript onload 处理程序并将 document.cookie 从外部传递到您的 Flash 应用程序。
您可以从闪存读取和写入 cookie(本地共享对象)。Flash cookie 存储在您的 PC 上以您的域名称命名的目录中。这些目录位于:
[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\
Adobe 的这篇文章是一个好的开始。
一些谷歌搜索表明它可以通过使用查询字符串来完成:
对于 Web 应用程序,您可以通过 url 参数将值传递给 swf,然后(使用 swf 中的操作脚本)将它们保存到沙箱中。
cookie 可通过 document.cookie 用于 javascript - 尝试使用 flash 的 getURL 调用 javascript 函数。
getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');
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);
}
}
我晚了10年。如果你可以在页面中嵌入你需要的数据,那么抓取起来会容易 10 倍。
import flash.net.*
var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://stackoverflow.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(''));
}