jQuery (это) и ExternalInterface

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

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

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

jQuery (this) get возвращается как undefined. Я не знаю ID элемента объекта. Это динамический идентификатор. На странице также будет несколько файлов .swf.

Спасибо!


person Drew Baker    schedule 15.11.2010    source источник


Ответы (3)


Итак, я установил новую 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. Так счастлив!

person Drew Baker    schedule 16.11.2010

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

person wajiw    schedule 15.11.2010

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

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

person Filipe    schedule 15.11.2010
comment
Итак, как мне заставить ExternalInterface отправлять идентификатор объекта в JS-функцию? Я использую swfObject для динамического встраивания SWF. Поэтому я предполагаю, что это как-то связано с настройкой attribute.id. - person Drew Baker; 16.11.2010
comment
Я пытаюсь понять это, возможно, используя это: liveocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/ - person Drew Baker; 16.11.2010