我如何在Flash访问饼干?(How do I access cookies within Flas

2019-06-25 09:48发布

我期待抓住cookie值的Flash影片在同一个域中。 这可能吗?

让我们来看看我让用户设置变量foo和我使用任何网络编程语言将其存储。 我可以通过这种语言轻松地访问它,但我想通过Flash动画来访问它没有通过它通过在HTML页面中打印。

Answer 1:

如果你只是想存储和检索数据,你可能需要使用SharedObject类。 见Adobe的共享对象引用为更多的细节。

如果您要访问的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);
    }
}

你需要确保你使用“的allowScriptAccess”的参数在您的Flash对象启用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();
        }
    }
}

一旦你有HTTPCookies.as在您的Flash项目,HTTPCookies.js从你的网页加载,你应该能够调用的getCookie和setCookie方法从您的Flash影片来获取或设置中的HTTP cookies中。

这将只工作了很简单的价值观 - 字符串或数字 - 但任何事情更复杂,你真的应该使用共享对象。



Answer 2:

我相信闪光的物体具有通过JavaScript访问的功能,因此,如果没有更简单的方法,你至少可以使用JavaScript onload处理和传递的document.cookie从外面您的Flash应用程序。

更多资讯: http://www.permadi.com/tutorial/flashjscommand/



Answer 3:

你可以读写从Flash的cookies(本地共享对象)。 闪存Cookie与您的域的名称在目录中存储在电脑上。 这些目录位于:

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

此文章由Adobe是一个良好的开端。



Answer 4:

一些谷歌搜索表明,它可以用做查询字符串 :

对于Web应用程序,你可以通过值通过URL参数,SWF,和(里面SWF动作脚本),将它们保存到沙盒。



Answer 5:

Cookie可用于JavaScript的通过了document.cookie - 尝试使用闪光灯的使用getURL调用javascript函数。

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



Answer 6:

在HTTPCookies.as的getCookie方法应该用“回报”的声明。

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


Answer 7:

我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(''));

}


文章来源: How do I access cookies within Flash?