سؤال

كنت أحاول الوصول إلى swf من جافا سكريبت، لذا فإن هذا المثال في Liveocs هو ما أحاول تعديله. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#includeExamplesSummary

ومع ذلك، فإنه لا يعمل بشكل صحيح لسبب ما.المشكلة التي أواجهها هي أنها لا تعمل في Safari و Firefox ، فهي تعمل فقط إذا وضعت تنبيهًا في الوظيفة قبل أن تمرر JavaScript القيمة إلى SWF.(يبدو أنه يحتاج إلى بعض الوقت) حاولت أيضًا تعيين مؤقت في AS3 ، لكن المؤقت لا يعمل ، إلا أنه يساعد فقط في JS.

كل ما أردت فعله هو استخدام js لإخبار ملف swf بتشغيل ep1.swf.إليك رمز js الخاص بي:

document.observe('dom:loaded', function() {
    $('episode1').observe('click', function() {
        var params = {wmode : "transparent", allowScriptAccess:"always", movie:"header"};
        swfobject.embedSWF("swf/float.swf", "header", "100%", "100%", "9.0.0","expressInstall.swf", "", params, "");
        sendToActionScript("ep1.swf");
    });
})
function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        //alert("aaa")
        return document[movieName];
    }
}
function sendToActionScript(value) {     
    thisMovie('header').sendToActionScript(value);       
}

إليك رمز as3 الخاص بي:

private function receivedFromJavaScript(value:String):void {

    loader.load(new URLRequest(value));

}

لقد كنت أحاول لفترة طويلة حقا، هل يعرف أحد كيفية إصلاح هذا؟شكرًا.

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

المحلول

والمشكلة هي أن ملف SWF لم يتم تحميل بالكامل بحلول الوقت الذي حاول أن نسميها. لاعب فلاش وتحميلها على الارجح لكنه يأخذ بعض الوقت لتحميل والتهيئة ملف فرنك سويسري.

ما عليك القيام به هو إجراء مكالمة من ملف SWF إلى وظيفة جافا سكريبت عند تحميل ووضعها جافا سكريبت الخاصة هناك وليس في صفحة تحميل معالج أن يبدو لك أن تفعل الآن. بهذه الطريقة يمكنك أن تعرف أن تطبيق فلاش وتهيئته بشكل صحيح في ذلك الوقت. الطبقة ExternalInterface كنت تستخدم لديها طرق لتمكنك من الاتصال مرة أخرى إلى جافا سكريبت.

نصائح أخرى

استخدم هذا الرمز للحصول على كائن swf.

لقد اختبرت هذا الرمز على:

  • إي 9،8،7
  • فايرفوكس 6.0.1
  • نتسكيب نافيجيتور 9.0.0.6
  • أوبرا 11.5
  • جوجل كروم 13.0.782.215
  • Safari 3.2 (الكل في نظام التشغيل Windows)

وعملت بشكل جيد.

function GetSWF(strName) {
    if (window.document[strName] != null) {
        if (window.document[strName].length == null)
            return window.document[strName];
        else
            return window.document[strName][1];
    } else {
        if (document[strName].length == null)
            return document[strName];
        else
            return document[strName][1];
    }
}

وملخص النجاح:


وأستخدمه AC_RunActiveContent.js، والتي شكلتها فلاش عندما نشرت.
ويسمى بلدي فرنك سويسري fvar_js، كما سنرى فيما بعد:

AC_FL_RunContent(
        ...
    'src', 'fvar_js',
        ...

وأنا أؤكد هذا لأنني لم يكن لاستخدام وظيفة مثل thisMovie في آخر فوق للإشارة إلى كائن فرنك سويسري. وكنت قادرا على استخدام على الفور fvar_js (وأيضا، نوعا ما، كما سنرى).


في AS3 رمز بلادي كان لي خطوط:

if (ExternalInterface.available) {
    ExternalInterface.addCallback("js_to_as_f", js_from_as_f);
}

وحيث كان js_from_as_f وظيفة التي غيرت النص في حيز النص.


في HTML أقوم بإعداد ما يلي:

var timeoutId;
var js_initiate_callback = function() {
    // This is the swf object:
    fvar_js.js_to_as_f();
    clearTimeout ( timeoutId );
}
var reset_fvar_f = function(new_val) {
    fvar_val = new_val;
}
//js_initiate_callback();
timeoutId = setTimeout(js_initiate_callback, 1000);

وحاولت 1MS و100MS، ولكن كانت النتائج متقطعا. مع 1000ms هذا العمل في IE، FF وسفاري على جهاز كمبيوتر. لم فحص على نظام التشغيل Mac OS X.

والمفتاح، ومن الواضح، هو السماح للجميع الكائنات وكافة الاتصالات كائن الوقت للحصول على اقامة. ليس لدي أي فكرة ما هو الحد الأدنى من الوقت.

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