如何在Flash中访问Cookie?

如何在Flash中访问Cookie?,flash,actionscript,cookies,Flash,Actionscript,Cookies,我希望在Flash电影中获取同一域的cookie值。这可能吗 让我们看看,我让用户设置一个变量foo,并使用任何web编程语言存储它。我可以通过该语言轻松访问它,但我希望通过Flash电影访问它,而不必通过在HTML页面中打印它来传递它。我相信Flash对象具有通过javascript访问的功能,因此如果没有更简单的方法,您至少可以使用javascript onload处理程序,并从外部将document.cookie传递到您的flash应用程序中 此处的更多信息:您可以从flash读取和写入C

我希望在Flash电影中获取同一域的cookie值。这可能吗


让我们看看,我让用户设置一个变量foo,并使用任何web编程语言存储它。我可以通过该语言轻松访问它,但我希望通过Flash电影访问它,而不必通过在HTML页面中打印它来传递它。

我相信Flash对象具有通过javascript访问的功能,因此如果没有更简单的方法,您至少可以使用javascript onload处理程序,并从外部将document.cookie传递到您的flash应用程序中


此处的更多信息:

您可以从flash读取和写入Cookie(本地共享对象)。Flash Cookie存储在您的PC上的一个目录中,目录中有您的域名。这些目录位于:

[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\

来自Adobe的这是一个良好的开端。

一些谷歌搜索显示,可以通过以下方式实现:

对于web应用程序,您可以通过 通过url参数将值转换为swf,以及 (swf中包含操作脚本)保存 把它们放到沙箱里


javascript可以通过document.cookie访问cookie-尝试使用flash的getURL调用javascript函数


getURL('javascript:document.cookie=“varname=varvalue;expires=Thu,2001年8月2日20:47:11 UTC;path=“”)

如果只想存储和检索数据,可能需要使用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,如下所示(感谢)

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();
        }
    }
}
函数getCookie(键)
{
var-cookieValue=null;
如果(关键)
{
var cookieSearch=key+“=”;
if(document.cookie)
{
var cookieArray=document.cookie.split(“;”);
对于(var i=0;i
一旦您在flash项目中有了HTTPCookies.as,并且从网页加载了HTTPCookies.js,您就应该能够从flash电影中调用getCookie和setCookie来获取或设置HTTP cookies


这只适用于非常简单的值-字符串或数字-但对于任何更复杂的值,您确实应该使用SharedObject。

HTTPCookies中的getCookie方法。as应该使用“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(''));

}
导入flash.net*
var_loader:URLLoader=新的URLLoader();
var_req:URLRequest=新的URLRequest('https://stackoverflow.com');
_loader.addEventListener(Event.COMPLETE,_onComplete);
_加载程序。加载(_要求);
功能未完成(e:事件):无效{
var WANTEDATA:RegExp=/(.*)/ig;
var结果:Object=wantedData.exec(字符串(_loader.data));
跟踪(结果[0]。拆分(“”)。联接(“”)
.分割('')。加入('');
}

请注意,共享对象不是cookie,它们的工作原理大致相同,但共享对象是特定于Flash的。Flash代码实际上是如何获取js getCookie()调用的返回值的?AS代码中没有返回语句。它应该只返回外部接口调用的结果吗?