2013-02-23 48 views
0

我已經查看了所有可以找到的資源,以創建一個簡化的方法,但每次嘗試時都會遇到一個基本錯誤。我根本無法讓它工作!觸發通過swfobject的embedSWF嵌入的flash對象函數?

這裏是我的閃存測試動作從我的電影的第一個關鍵幀:

import flash.external.*; //THIS... 

System.security.allowDomain("http://localhost", "*"); //...AND THIS ALSO REQUIRED! 

if (ExternalInterface.available) { 
    trace("ExternalInterface= " + ExternalInterface.available); 
    flash.external.ExternalInterface.addCallback("myExternalMethod", null, myFunction); 
} 

function myFunction() { 
    gotoAndStop(2); 
} 

這裏是jQuery的我的JavaScript /點點:

<script type="text/javascript"> 
    var flashvars = {}; 
    var params = { 
     wmode: "transparent", 
     allowscriptaccess: "always" 
    }; 

    var attributes = { //The addition of these attributes make it work! 
     id: "number-input", 
     name: "number-input" 
    }; 

    var embedHandler = function (e){ 
     mySWF = e.ref; 
    }; 

    swfobject.embedSWF("images/flash-form.swf", "number-input", "800", "320", "9.0.0", "expressInstall.swf", flashvars, params, attributes, embedHandler); 

    function executeFlash() { 
     getObjectById("number-input").myExternalMethod(); 
    } 

    function getObjectById(objectIdStr) { 
     var r = null; 
     var o = document.getElementById(objectIdStr); 
     if (o && o.nodeName == "OBJECT") { 
      if (typeof o.SetVariable != undefined) { 
       r = o; 
      } else { 
       var n = o.getElementsByTagName(OBJECT)[0]; 
       if (n) { 
        r = n; 
       } 
      } 
     } 
     return r; 
    } 

    $(function() { 
     $('#main-button-big').click(function(event){ 
      event.preventDefault(); 
      executeFlash(); 
     }); 

    }); 
</script> 

閃光燈似乎已成功嵌入,如果我做一些愚蠢的事情...

$(mySWF).hide(); 

...它隱藏,所以我確定scrip t可以看到物體。

不管我試圖做我一直(在Firefox測試)得到一個錯誤,像什麼方法:

錯誤:類型錯誤:mySWF.myExternalMethod不是一個函數。

在Safari中:

類型錯誤: '未定義' 不是(評估 'mySWF.myExternalMethod()')

如果我嘗試的getElementById的jQuery的版本(環遊embedHandler)我得到一個功能:

錯誤:TypeError:$(...)。myExternalMethod不是函數。或TypeError:'undefined'不是函數(評估'$('#number-plate-input')。myExternalMethod()')

我需要讓這個項目快速完成,並在我的繫繩。任何幫助將非常感激地收到。

更新:請注意,embedHandler不再需要,也不用於觸發任何類型的事件。這是一個代碼有用一塊了,所以我選擇把它留在

+0

我在我的Mac上測試apache服務器。沒有通過文件系統瀏覽頁面,我還在全局安全Flash設置中將apache文件夾的根設置爲受信任的位置。 – adamg2000 2013-02-23 22:39:26

+0

您確定在實際的Flash Player實例上調用該方法,而不是在包含Flash的元素上調用該方法嗎?換句話說,當你調用mySWF.myExternalMethod()時,你能確認mySWF引用正確的東西嗎? – 2013-02-23 23:38:19

回答

1

變化從一個空對象在JavaScript中attributes變量:

var attributes = { 
    id: "flash_movie", 
    name: "flash_movie" 
}; 

然後你應該能夠呼籲暴露功能使用:

document.getElementById("flash_movie").myExternalMethod(); 
+0

我添加了這個代碼,正確地重命名了id/name,現在它完美地工作了,謝謝@danni!你是明星! – adamg2000 2013-02-24 20:28:21

+0

不客氣!樂意效勞 – danii 2013-02-24 20:31:53

相關問題