2010-11-15 29 views
2

Hey Guys, J'ai ExternalInterface pour appeler une fonction javascript. Mais comment puis-je maintenant utiliser jQuery pour cibler le fichier .swf qui a appelé la fonction? Par exemple, j'appelle la fonction "changeObject" en utilisant ExternalInterface. Comment devrais-je obtenir jQuery pour modifier le même tag d'objet de fichiers flash? Voilà ce que je l'ai et il ne fonctionne pas:jQuery (this) et ExternalInterface

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

jQuery (this) get retourné comme non défini. Je ne connais pas l'ID de l'élément d'objet. C'est un identifiant dynamique. Il y aura plusieurs .swf sur une page aussi.

Merci!

Répondre

1

J'ai donc défini un nouveau Flashvar qui était un ID de joueur unique. Comme ceci:

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

je puis installation qui flashVar en actionscript (en 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);  

Puis en Javascript j'ai maintenant le playerID à utiliser comme ceci:

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

    } 

Donc j'utilise simplement l'arg playerID au lieu de (this) dans jQuery. Tellement heureux!

0

Je ne pense pas qu'il existe un moyen d'obtenir l'objet appelant, mais une solution serait d'ajouter un attribut à cette fonction changeObject et de transmettre l'identifiant du swf à celui de votre application Flash.

0

J'ai jeté un rapide coup d'œil à la documentation et cela ne semble pas possible (mais je me trompe peut-être, et j'invite toute personne ayant plus de connaissances sur le sujet à me corriger). Ce que vous pouvez essayer de faire est d'initier chaque swf avec un identifiant, puis de retransmettre cet identifiant à chaque appel de fonction (l'identifiant correspond à l'ID de l'objet swf).

+0

Alors, comment est-ce que j'obtiendrais ExternalInterface pour envoyer l'ID de l'objet à la fonction JS alors? J'utilise swfObject pour intégrer le SWF dynamiquement. Donc je suppose que cela aurait quelque chose à voir avec le paramètre attributes.id. –

+0

J'essaie de comprendre cela en utilisant ceci: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#objectID –