10

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

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

4

7 回答 7

11

如果您只想存储和检索数据,您可能需要使用 SharedObject 类。有关详细信息,请参阅Adob​​e 的 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。

于 2008-09-22T11:12:10.767 回答
0

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

更多信息在这里:http ://www.permadi.com/tutorial/flashjscommand/

于 2008-09-20T22:18:29.200 回答
0

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

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

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

于 2008-09-20T22:19:39.010 回答
0

一些谷歌搜索表明它可以通过使用查询字符串来完成:

对于 Web 应用程序,您可以通过 url 参数将值传递给 swf,然后(使用 swf 中的操作脚本)将它们保存到沙箱中。

于 2008-09-20T22:22:48.940 回答
0

cookie 可通过 document.cookie 用于 javascript - 尝试使用 flash 的 getURL 调用 javascript 函数。

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

于 2008-09-21T09:29:19.260 回答
0

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);    
  }
}
于 2008-10-01T18:27:39.353 回答
0

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

}
于 2018-04-30T20:06:56.343 回答