2008-12-30 7 views
8

Ürünüm bir web tarayıcısını açar ve yerel bir Flash uygulaması içeren bir HTML dosyasına yönlendirir. Bu dosyanın başarıyla yüklenip yüklenmediğini ve hangi özel durumun atılmadığını program aracılığıyla nasıl algılayabilirim? Javascript kullanarak bunu yapmak için bir yolu var mı?Flash uygulamasının Javascript kullanılarak doğru şekilde yüklenip yüklenmediğini algıla?

Dosyanın diskte bulunup bulunmadığını harici olarak kontrol etmek yeterli değil çünkü başka hatalar görüyorum (yarış koşulları söz konusu olabilir).

cevap

11

Kendi sorumu yanıtlayan: https://sourceforge.net/forum/message.php?msg_id=5929756

  1. Flash yüklendiğinde eğer çağrılması gereken bir JavaScript işlevi tanımlayın.
  2. Bu yöntemi Flash dosyanızın en üstünde çağırın.
  3. Geri aramanın hiçbir zaman çağrılmadığını tespit etmek için bir zamanlayıcı kullanın.
  4. Flash işlevlerini Javascript'ten çağırmak yerine, Flash'tan Javascript işlevlerini çağırmayı tercih edin. Her iki durumda da henüz yüklenmemiş bir işlevi çağırmayasınız. Tarayıcının Flash uygulamasından önce Flash'ın Flash işlevini yüklemesini tamamladığından emin olmak için Javascript işlevini yüklemeyi tamamladığını garanti etmek çok daha kolaydır.

    • Ben Flaş gömmek için swfobject kullanıyorum: Burada

bir örnektir.

  • Flash'ın hangi Javascript işlevinin çağrılacağını söylemek için FlashVars kullanıyorum. Bu, sayfada birden çok Flash nesnesi varsa yararlıdır.
  • Flaş

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

    JavaScript

    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

    parlak! Bu bugün çok yardımcı olur: D –

    3

    HTML sayfası yükleme sona erdiğinde Aslında, Flash içeriği tamamen henüz yüklenmemiş olabilir. SWF yüklenmemişse, başarısız olmuş gibi görünecektir.

    Genelde önerdiğim yöntem, belge sınıfı yapıcısı çağrıldığında SWF'nin ExternalInterface aracılığıyla hemen bir JavaScript işlevi çağırmasını sağlamaktır. Temel olarak, SWF'nin JS işlevi çağrılmadıkça yüklenemediğini varsayalım.

    +0

    Yeterince adil, ancak bir arıza meydana geldiğini tespit etmek için daha somut bir yola ihtiyacım var. Zaman aşımı yeterince güvenilir değil. – Gili

    +0

    Bu yöntemle ilgili bir sorun, aynı sayfada iki flaş örneğine sahip olamamanızdır. Ya da en azından hangisinin geri aramayı tetiklediğini bilmiyorsunuz. – zimbatm

    +0

    Hangi SWF'nin geri aramayı başlattığını söylemek için FlashVars'ı kullanarak benzersiz bir dize veya sayıyı tanımlayıcı olarak iletebilirsiniz. SWF, aramayı JavaScript'e yaptığında, aynı zamanda, argümandaki tanımlayıcıyı da geçirir. – joshtynjala

    4

    SWF'yi değiştiremeyeceğiniz ve ExternalInterface ekleyemediğiniz durumlarda bir seçenek değildir, yine de swf'nin durumunu öğrenmek için Javascript'i kullanabilirsiniz. Örneğin, Javascript'ten document.getElementById (swf_id) .PercentLoaded() öğesini çağırabilir ve 100 olmasını bekleyebilirsiniz.

    Bu, swf yüklenemediğinde hangi özel durumun atıldığını size söylemez, ancak en azından yüklendiğinden emin olursunuz. Diğer kullanışlı çağrılar şu adreste bulunur: http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html

    +0

    Başka bir SWF dosyasını çalan bir SWF dosyası başlatılamıyor musunuz? Sarmalayıcıyı denetlersiniz ve iç içe SWF dosyası bir tane atarsa ​​bir istisna atar. – Gili

    +0

    Bu bağlantı, şimdi bir 404 döndürüyor. –