2008-09-20 3 views
10

Я ищу, чтобы захватить значения cookie для того же домена в Flash-ролике. Это возможно?Как получить доступ к файлам cookie в Flash?

Давайте посмотрим, что я разрешил пользователю задавать переменную foo, и я храню ее с использованием любого языка веб-программирования. Я могу легко получить доступ к этому языку, но я хотел бы получить к нему доступ через Flash-видео, не передавая его через печать на странице HTML.

ответ

11

Если вы просто хотите хранить и извлекать данные, вы, вероятно, хотите использовать класс SharedObject. См. Adobe's SharedObject reference для получения более подробной информации.

Если вы хотите получить доступ к файлам cookie HTTP, вам необходимо использовать 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); 
    } 
} 

Вы должны убедиться, что вы включите JavaScript с помощью параметра 'AllowScriptAccess' в вашем объекте флэш-памяти.

Затем вам нужно создать пару яваскрипта функций, 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 из вашего флеш-ролика, чтобы получить или установить HTTP-файлы cookie.

Это будет работать только для очень простых значений - строк или чисел - но для чего-то более сложного вам действительно нужно использовать SharedObject.

+0

Как флэш-код действительно получает возвращаемое значение вызова js getCookie()? В вашем коде AS нет возврата. Должен ли он просто вернуть результат вызова ExternalInterface? – Herms 2008-10-01 18:39:18

0

Я считаю, что флэш-объекты имеют функции, доступные через javascript, поэтому, если нет более простого способа, вы могли бы хотя бы использовать обработчик onload javascript и передать документ.cookie в ваше приложение для флеш-приложения снаружи.

Больше информации здесь: http://www.permadi.com/tutorial/flashjscommand/

0

Вы можете читать и писать печенье (Local Shared Object) из флэш-памяти. Файлы cookie Flash хранятся на вашем компьютере в каталоге с именем вашего домена. Эти каталоги расположены по адресу:

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

article Это от Adobe является хорошим началом.

+1

Обратите внимание, что общими объектами являются * не * куки-файлы, они работают более или менее одинаково, но SharedObjects являются специфичными для Flash. – grapefrukt 2008-09-20 23:03:43

0

Некоторые Googling показывает, что это может быть сделано с помощью query strings:

Для веб-приложений, вы можете передать значения швейцарских франков, по параметрам URL-адреса, и (с помощью сценария действий внутри SWF) сохранить их песочница.

0

куки-файлы доступны для javascript через document.cookie - попробуйте использовать getURL flash, чтобы вызвать функцию javascript.

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

0

Метод getCookie в HTTPCookies.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);  
    } 
} 
Смежные вопросы