2010-11-15 3 views
2

Hey Guys, У меня есть ExternalInterface для вызова функции javascript. Но как я могу теперь использовать jQuery для таргетинга на .swf, который вызвал функцию?jQuery (this) и ExternalInterface

Например, я вызываю функцию «changeObject» с помощью ExternalInterface. Как я могу получить jQuery для изменения одного и того же тега объекта флеш-файлов? Это то, что я есть, и он не работает:

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

JQuery (это) получить вернулся как неопределенные. Я не знаю идентификатора элемента объекта. Это динамический идентификатор. На странице также будет несколько .swf.

Спасибо!

ответ

1

Итак, я установил новый Flashvar, который был уникальным идентификатором игрока. Как это:

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); 

Я тогда установка, которая FlashVar в ActionScript (в 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 вместо (this) в jQuery. Так счастлив!

0

Я не думаю, что есть какой-либо способ получить объект-вызывающий объект, но одним из решений было бы добавить атрибут этой функции changeObject и передать идентификатор swf тому, что из вашего Flash-приложения.

0

Я быстро просмотрел документацию, и это не представляется возможным (но я вполне возможно ошибаюсь и приглашаю кого-либо с большим количеством знаний по этому вопросу, чтобы исправить меня).

Что вы можете попытаться сделать, это инициировать каждый swf с помощью идентификатора, а затем передать этот идентификатор обратно при каждом вызове функции (идентификатор будет соответствовать идентификатору объекта swf).

+0

Итак, как я могу получить ExternalInterface для отправки идентификатора объекта в JS-функцию? Я использую swfObject для динамического встраивания SWF. Поэтому я предполагаю, что это будет связано с настройкой attributes.id. –

+0

Я пытаюсь понять это, используя это возможно: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#objectID –

Смежные вопросы