开发者

jQuery(this) and ExternalInterface

Hey Guys, I've got ExternalInterface to call a javascript function. But how can I now use jQuery to target the .swf that called the function?

For example, I'm calling the "changeObject" function using ExternalInterface. How would I get jQuery to modify the same flash files object tag? This is what I have and i开发者_如何学JAVAt doesn't work:

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

jQuery(this) get's returned as undefined. I do not know the ID of the object element. It's a dynamic ID. There will be multiple .swf's on a page too.

Thanks!


So I set a new Flashvar that was a unique playerID. Like this:

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

I then setup that Flashvar in actionscript (in 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);    

Then in Javascript I now have the playerID to use like this:

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

    }

So I just use the arg playerID instead of the (this) in jQuery. So happy!


I don't think there's any way to get the caller object, but one solution would be to add an attribute to that changeObject function and pass the id of the swf to that from your Flash app.


I had a quick look through the documentation and this doesn't appear to be possible (but I'm quite possibly wrong, and invite anyone with more knowledge on the subject to correct me).

What you can try to do is initiate each swf with an identifier, and then pass that identifier back with every function call (the identifier would match the swf object's ID).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜