2008-12-30 5 views
8

मेरा उत्पाद एक वेब ब्राउज़र खोलता है और इसे एक स्थानीय फ्लैश एप्लिकेशन वाले एचटीएमएल फाइल पर इंगित करता है। मैं प्रोग्रामेटिक रूप से कैसे पता लगा सकता हूं कि यह फ़ाइल सफलतापूर्वक लोड हो गई है और यदि नहीं अपवाद को फेंक दिया गया था? क्या जावास्क्रिप्ट का उपयोग करके ऐसा करने का कोई तरीका है?पता लगाएं कि फ्लैश एप्लिकेशन जावास्क्रिप्ट का उपयोग करके सही ढंग से लोड हो गया है या नहीं?

बाह्य कि क्या फ़ाइल डिस्क पर मौजूद है जाँच हो रही है पर्याप्त है क्योंकि मैंने देखा है अन्य विफलताओं होते हैं (दौड़ की स्थिति शामिल हो सकता) नहीं है।

उत्तर

11

मेरे अपने प्रश्न का उत्तर देना: https://sourceforge.net/forum/message.php?msg_id=5929756

  1. एक जावास्क्रिप्ट समारोह है कि अगर फ्लैश लोड लागू किया जाना चाहिए परिभाषित करें।
  2. इस विधि को अपनी फ्लैश फ़ाइल के शीर्ष से आमंत्रित करें।
  3. यह पता लगाने के लिए टाइमर का उपयोग करें कि क्या कॉलबैक कभी नहीं बुलाया जाता है।
  4. बल्कि जावास्क्रिप्ट फ़्लैश कार्यों लागू की तुलना में फ्लैश से लागू जावास्क्रिप्ट कार्यों को प्राथमिकता दें। किसी भी तरह से आप एक ऐसे फ़ंक्शन को नहीं बुला सकते जो अभी तक लोड नहीं हुआ है। यह गारंटी देना बहुत आसान है कि ब्राउजर ने फ्लैश से इसे आविष्कार करने से पहले अपने जावास्क्रिप्ट फ़ंक्शन को लोड करना समाप्त कर दिया है, यह गारंटी देने से कि फ्लैश ने जावास्क्रिप्ट से इसे आमंत्रित करने से पहले अपने फ्लैश फ़ंक्शन को लोड करना समाप्त कर दिया है।

    • मैं swfobject उपयोग कर रहा हूँ एम्बेड करने के लिए फ्लैश:

यहाँ एक उदाहरण है।

  • मैं flashvars का उपयोग फ्लैश बताने के लिए जो जावास्क्रिप्ट समारोह आह्वान करने के लिए। पृष्ठ पर कई फ्लैश ऑब्जेक्ट्स होने पर यह उपयोगी होता है।
  • फ्लैश

    var params:Object = LoaderInfo(this.root.loaderInfo).parameters; 
    if (ExternalInterface.available) 
    { 
        var onLoaded:String = params["onLoaded"]; 
        if (onLoaded != null) 
         ExternalInterface.call(onLoaded, true); 
    } 
    

    जावास्क्रिप्ट

    var flashLoaded = false; 
    var flashTimer; 
    
    function onFlashLoaded() 
    { 
        flashLoaded = true; 
        clearTimeout(flashTimer); 
    } 
    
    function onFlashTimeout() 
    { 
        if (!isFlashLoaded) 
        { 
         // Remove the Flash object in case it is partially loaded 
         $("#videoFeed").empty(); 
         $("#videoFeed").append('<div id="flashObject"></div>'); 
         alert("Failed to load video player"); 
        } 
        clearTimeout(flashTimer); 
    } 
    
    function connectToVideo() 
    { 
        var flashvars = {}; 
        flashvars.onLoaded = "onFlashLoaded"; 
    
        var params = {}; 
        params.menu = false; 
    
        var attributes = {}; 
    
        isFlashLoaded = false; 
        flashTimer = setTimeout("onFlashTimeout()", 5000); 
    
        swfobject.embedSWF("flash/VideoFeed.swf", "flashObject", "800", "600", "11", "expressInstall.swf", flashvars, params, attributes); 
    } 
    
    +1

    शानदार! इससे आज बहुत मदद मिलेगी: डी –

    3

    असल में, जब HTML पृष्ठ के लोड न हो, फ़्लैश सामग्री पूरी तरह से अभी तक लोड नहीं किया जा सकता है। अगर एसडब्ल्यूएफ लोड नहीं हो रहा है, तो यह असफल रहा प्रतीत होता है।

    विधि मैं आमतौर पर की सिफारिश SWF ExternalInterface के माध्यम से एक JavaScript फ़ंक्शन कॉल तुरंत जब दस्तावेज़ वर्ग निर्माता शुरू हो जाती है है। असल में, मान लें कि एसडब्ल्यूएफ लोड होने में असफल रहा है जब तक कि जेएस फ़ंक्शन को कॉल नहीं किया जाता है।

    +0

    पर्याप्त मेला, लेकिन मुझे यह पता लगाने के लिए एक और ठोस तरीका चाहिए कि विफलता हुई है या नहीं। एक टाइमआउट पर्याप्त विश्वसनीय नहीं है। – Gili

    +0

    इस विधि के साथ एक समस्या यह है कि आपके पास एक ही पृष्ठ पर फ़्लैश के दो उदाहरण नहीं हो सकते हैं। या कम से कम आप नहीं जानते कि किसने कॉलबैक ट्रिगर किया है। – zimbatm

    +0

    यह बताएं कि कौन सी एसडब्ल्यूएफ ने कॉलबैक ट्रिगर किया है, आप FlashVars का उपयोग करके एक पहचानकर्ता के रूप में एक अद्वितीय स्ट्रिंग या संख्या में गुजर सकते हैं। जब एसडब्ल्यूएफ जावास्क्रिप्ट को कॉल करता है, तो यह तर्क में पहचानकर्ता भी पास करता है। – joshtynjala

    1

    को एडोब ExternalInterface प्रलेखन अनुसार: http://livedocs.adobe.com/flex/3/langref/flash/external/ExternalInterface.html कुछ वेब ब्राउज़र दस्तावेज़ वर्ग निर्माता में ExternalInterface के माध्यम से एक जावास्क्रिप्ट समारोह बुला प्रतिबंधित करता है, तो एक पॉप-अवरोधक सक्षम है।

    वहाँ जब swf फिल्म सफलतापूर्वक लोड किया गया है पता लगाने के लिए किसी अन्य समाधान कर रहे हैं?

    4

    मामलों में जहां आप swf संशोधित नहीं कर सकते हैं और एक ExternalInterface जोड़ने एक विकल्प नहीं है, आप अभी भी swf का दर्जा प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं। उदाहरण के लिए, आप जावास्क्रिप्ट से document.getElementById (swf_id) .PercentLoaded() को कॉल कर सकते हैं, और इसके लिए 100 होने का इंतजार कर सकते हैं।

    यह आपको नहीं बताएगा कि एसएफएफ लोड होने में विफल होने पर क्या अपवाद फेंक दिया गया था, लेकिन कम से कम आप यह सुनिश्चित करने के लिए जान लेंगे कि यह लोड हो गया है या नहीं। अन्य उपयोगी कॉल यहां पाए जाते हैं: http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html

    +0

    क्या आप बस एक एसडब्ल्यूएफ फ़ाइल लॉन्च नहीं कर सकते जो एक और एसडब्ल्यूएफ फाइल चलाता है? आप रैपर को नियंत्रित करते हैं, और अगर नेस्टेड एसडब्ल्यूएफ फ़ाइल फेंकता है तो यह अपवाद फेंकता है। – Gili

    +0

    यह लिंक अब 404 लौटा रहा है। –

    संबंधित मुद्दे