jQuery (это) и ExternalInterface - PullRequest
       17

jQuery (это) и ExternalInterface

2 голосов
/ 16 ноября 2010

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

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

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

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 16 ноября 2010

Итак, я установил новый 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);

Затем я устанавливаю этот 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 голосов
/ 16 ноября 2010

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

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

0 голосов
/ 16 ноября 2010

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

...