كيف يمكنني الوصول إلى ملفات تعريف الارتباط داخل Flash؟

StackOverflow https://stackoverflow.com/questions/109580

  •  01-07-2019
  •  | 
  •  

سؤال

إنني أتطلع إلى الحصول على قيم ملفات تعريف الارتباط لنفس المجال داخل فيلم Flash.هل هذا ممكن؟

دعونا نرى أنني أسمح للمستخدم بتعيين متغير foo وتخزينه باستخدام أي لغة برمجة ويب.يمكنني الوصول إليه بسهولة عبر تلك اللغة، لكني أرغب في الوصول إليه عبر فيلم Flash دون تمريره عبر طباعته داخل صفحة HTML.

هل كانت مفيدة؟

المحلول

إذا كنت تريد فقط تخزين البيانات واستردادها، فربما تريد استخدام فئة SharedObject.يرى مرجع Adobe SharedObject لمزيد من التفاصيل حول ذلك.

إذا كنت تريد الوصول إلى ملفات تعريف الارتباط 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);
    }
}

يجب عليك التأكد من تمكين جافا سكريبت باستخدام المعلمة "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 في مشروع الفلاش الخاص بك، ويتم تحميل HTTPCookies.js من صفحة الويب الخاصة بك، يجب أن تكون قادرًا على الاتصال بـ getCookie وsetCookie من داخل فيلم الفلاش الخاص بك للحصول على ملفات تعريف الارتباط HTTP أو تعيينها.

لن يعمل هذا إلا مع القيم البسيطة جدًا - السلاسل أو الأرقام - ولكن بالنسبة لأي شيء أكثر تعقيدًا، يجب عليك حقًا استخدام SharedObject.

نصائح أخرى

أعتقد أن كائنات الفلاش لها وظائف يمكن الوصول إليها من خلال جافا سكريبت، لذلك إذا لم تكن هناك طريقة أسهل، فيمكنك على الأقل استخدام معالج تحميل جافا سكريبت وتمرير document.cookie إلى تطبيق الفلاش الخاص بك من الخارج.

مزيد من المعلومات هنا: http://www.permadi.com/tutorial/flashjscommand/

يمكنك قراءة وكتابة ملفات تعريف الارتباط (كائن مشترك محلي) من الفلاش.يتم تخزين ملفات تعريف الارتباط الفلاش على جهاز الكمبيوتر الخاص بك داخل دليل يحمل اسم المجال الخاص بك.توجد هذه الدلائل في:

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

هذا شرط من Adobe بداية جيدة.

تظهر بعض عمليات البحث على Google أنه يمكن القيام بذلك باستخدام سلاسل الاستعلام:

بالنسبة لتطبيقات الويب ، يمكنك تمرير القيم إلى SWF بواسطة معلمات URL ، و (مع برنامج عمل داخل SWF) حفظها إلى صندوق الرمل.

ملفات تعريف الارتباط متاحة لجافا سكريبت من خلال document.cookie - حاول استخدام getURL الخاص بالفلاش لاستدعاء وظيفة جافا سكريبت.

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

يجب أن تستخدم طريقة 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);    
  }
}

لقد تأخرت 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(''));

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top