2013-09-27 111 views
0

我正在處理一個旨在跟蹤使用本地共享對象的用戶的項目。用戶首先訪問頁面A,該頁面具有一個植入了本地共享對象的嵌入式.swf。我知道它通過測試我自己的flash cookies來工作。ActionScript3(AS3)外部接口調用javascript/jquery函數不起作用

在訪問頁面B時,另一個嵌入式.swf將嘗試檢索flash cookie,並在cookie存在時調用AJAX函數。頁面B是我遇到的麻煩。在這個網頁上嵌入了一個.swf對象,以及一個AJAX函數。以下代碼是頁面B的HTML。它包含AJAX腳本以及嵌入式.swf。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
      function databaseAndemail(){ 
      $.get('http://www.mywebsite.com/databaseAndemail.php'); 
      } 
     </script> 
    </head> 
    <body> 
      <object width="1" height="1"> 
       <param name="CheckLSO" value="http://www.mywebsite.com/CheckLSO.swf"> 
       <embed src="http://www.mywebsite.com/CheckLSO.swf" width="1" height="1"> 
       </embed> 
      </object> 
    </body> 

問題不在於AJAX函數,也不在PHP腳本中,因爲我知道這是有效的。問題可能在於檢查LSO的.swf腳本。這就是所謂的CheckLSO.swf AS3腳本:

public function Main():void 
    { 
     //Check for a LSO 
     var myLocalData:SharedObject = SharedObject.getLocal("myData"); 
     if (myLocalData.data.uname != null){ //LSO exists, so call AJAX function to update database and send email. 
       if (ExternalInterface.available){ 
        ExternalInterface.call("databaseAndemail"); 
       }    
      }; 

     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

我會包括AS3腳本將這裏的餅乾供你參考(再次,我測試過這一個,它的工作原理):

public function Main():void 
    { 
      // Create a new SharedObject 
     var myLocalData:SharedObject = SharedObject.getLocal("myData"); 
     // Save data to the SharedObject 
     myLocalData.data.uname = "ERE"; 
     myLocalData.flush(); 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

總而言之,我認爲出於某種原因,Javascript函數沒有被外部接口調用。我知道cookie被設置,我知道AJAX的作品,我知道PHP腳本的作品(我沒有包括PHP,這似乎超出了這個問題的範圍)。兩個.swf腳本都被調試。我在Flash 4中使用了FlashDevelop。這些都是非常簡單的腳本,所以我想不出任何可能會出錯的東西。有任何想法嗎??

回答

3

可能是腳本訪問設置。在嵌入中,嘗試包括param allowcriptaccess:「always」。沒有它,外部接口調用將失敗。

<object width="1" height="1"> 
    <param name="CheckLSO" value="http://www.mywebsite.com/CheckLSO.swf"> 
    <param name="allowscriptaccess" value="always"> 
    <embed src="http://www.mywebsite.com/CheckLSO.swf" width="1" height="1"></embed> 
</object> 

更好的是,使用swfObject 2來嵌入您的swf。

SwfObject

+0

感謝您的回答!不幸的是,它仍然無法正常工作。我使用了你的兩個建議。 – Kev

+0

無賴。嘗試添加警報('我的功能工作!');作爲databaseAndemail()中的第一件事。如果你得到一個彈出窗口,你就會知道該呼叫正在工作,而其他事件則會導致你的麻煩 – Ribs

+0

固定! :)我嘗試使用swfObject動態發佈,而不是靜態發佈,並出於某種原因它的工作。所以你是對的:這是嵌入問題。我沒有改變我的代碼中的其他任何東西。將您的答案標記爲已接受! – Kev