2010-11-15 89 views
2

嘿夥計, 我有ExternalInterface來調用一個javascript函數。但是,我現在如何使用jQuery來定位調用該函數的.swf?jQuery(this)and ExternalInterface

例如,我使用ExternalInterface調用「changeObject」函數。我將如何讓jQuery修改相同的Flash文件對象標籤?這是我有,它不工作:

function changeObject() 
{ 
    jQuery(this).css('height','500px'); 
}; 

jQuery(this)get的返回爲undefined。我不知道對象元素的ID。這是一個動態ID。頁面上也會有多個.swf文件。

謝謝!

回答

1

所以我設置了一個新的Flashvar,它是一個獨特的playerID。就像這樣:

var flashvars = {}; 
flashvars.src = '<?= $this->get('link') ?>'; 
flashvars.playerID = '<?= "flash-".uniqid(); ?>'; 
var params = {}; 
params.allowscriptaccess = 'always'; 
var attributes = {}; 
attributes.id = '<?= $this->get('attributeId') ?>'; 
swfobject.embedSWF('<?= $this->get('pluginUrl') ?>/flash/wiredrivePlayer.swf', 'no-flash-content', '100%', '100%', '10.0.0', 'expressInstall.swf', flashvars, params,attributes); 

然後我設置的是Flash變數的動作(在Model.as):

// Add into the "Declare private vars" section 
private var _playerID:String; 

// Add into the private function init(flashvars:Object) section 
_playerID = flashvars.playerID; 

//Add into the public functions section 
public function get playerID():String { 
    return _playerID; 
} 

//Add into the public function endOfItem() section 
// inform JavaScript that the FLV has stopped playing 
ExternalInterface.call("stoppedPlaying", _playerID);  

然後在Javascript我現在playerID像這樣使用:

function stoppedPlaying(playerID) 
    { 
     // do something when the FLV starts playing 
     var playerID = '#' + playerID 
     jQuery(playerID).css('background','red'); 

    } 

所以我只使用arg playerID而不是jQuery中的(this)。很高興!

0

我不認爲有任何方法來獲取調用者對象,但一種解決方案是將一個屬性添加到該changeObject函數並將swf的id傳遞給您的Flash應用程序。

0

我對文檔進行了快速瀏覽,並且這看起來不太可能(但我很可能是錯誤的,並邀請任何對此主題有更多瞭解的人來糾正我)。

你可以嘗試做的是用標識符初始化每個swf,然後在每次函數調用時將該標識符返回(標識符將匹配swf對象的ID)。

+0

那麼如何讓ExternalInterface將對象的ID發送給JS函數呢?我正在使用swfObject動態地嵌入SWF。所以我認爲這將與attributes.id設置有關。 – 2010-11-15 22:49:12

+0

我試圖找出它可能:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#objectID – 2010-11-16 00:11:26