如何在Flash中访问Cookie?

时间:2020-03-06 14:29:40  来源:igfitidea点击:

我正在寻找Flash电影中相同域的cookie值。这可能吗?

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

解决方案

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

此处提供更多信息:http://www.permadi.com/tutorial/flashjscommand/

我们可以从闪存读取和写入Cookie(本地共享对象)。 Flash cookie存储在PC上具有域名的目录中。这些目录位于:

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

Adobe的这篇文章是一个好的开始。

一些Google搜索显示,可以通过使用查询字符串来完成此操作:

For web applications, you can pass
  values to swf by url parameters, and
  (with action script inside swf) save
  them to the sandbox.

Cookie可以通过document.cookie用于javascript。请尝试使用Flash的getURL调用javascript函数。

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

如果只想存储和检索数据,则可能要使用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。

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);    
  }
}