2009-09-08 8 views
1

J'ai deux cas silverlight intégrés dans une page comme suit (le contenu SIMPLIFIÉE aux détails pertinents seulement): -Silverlight 3 événements onload liant plusieurs instances

<object id="SL1" data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
    <param name="source" value="/clientBin/Common.xap"></param> 
    <param name="minRuntimeVersion" value="3.0.40624.0"></param> 
    <param name="windowless" value="True"></param> 
    <param name="onload" value="silverlight_onload"></param> 
    <param name="initParams" value="some configuration here"></param> 
</object> 

<object id="SL2" data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
    <param name="source" value="/clientBin/Common.xap"></param> 
    <param name="minRuntimeVersion" value="3.0.40624.0"></param> 
    <param name="windowless" value="True"></param> 
    <param name="onload" value="silverlight_onload"></param> 
    <param name="initParams" value="a different configuration here"></param> 
</object> 

Comme vous pouvez le voir à la fois le point objects au même xap mais aura un contenu différent dans les initParams.

Notez cependant que le paramètre onload pointe sur le nom de la fonction. Cette partie particulière de cette question est invariant.

Ailleurs en javascript au niveau mondial, j'ai: -

function silverlight_onload(sender, eventargs) 
{ 
    //Magic pixie dust here 
} 

L'objectif est de prendre le sender et déterminer lequel des éléments d'objet est la source de l'événement. La réponse simple (mais pour la raison de cette question inacceptable) serait d'utiliser deux fonctions différentes. Je cherche quelque chose qui ne nécessite pas qu'une nouvelle fonction soit ajoutée à l'espace de noms global par objet SL. En prime, félicitations à tous ceux qui peuvent me dire pourquoi SL n'a pas pu obtenir plus d'aide du navigateur de l'hôte et gérer le paramètre onload plus comme d'autres événements d'éléments comme onlick. Par exemple demander au navigateur eval("function() {" + onload + "}" et attacher la fonction de retour à l'événement onload.

Répondre

3

Votre but est-il d'obtenir les initparams dans le javascript et de faire quelque chose avec? Si oui, vous pouvez faire:

sender.getHost().InitParams 

le getHost() retourne l'objet réel plug-in see msdn page for more details. Je ne connais pas de moyen d'obtenir l'ID de l'objet sauf si vous le définissez comme un initparam.

+0

getHost() est ce que je suis après, il retourne l'élément d'objet spécifique hébergeant le plugin en cours d'exécution de l'événement. Je peux donc l'utiliser pour diriger le flux du programme vers le code correct pour l'élément. – AnthonyWJones

0

Bien votre premier point d'appel devrait être le silverlight.js reference. Fondamentalement, votre fonction javascript "silverlight_onload" va obtenir l'expéditeur de l'élément d'objet html réel, donc vérifiez ce que c'est id et vous aurez ce que je pense que vous voulez.

La raison pour laquelle SL ne peut pas obtenir plus d'assistance de l'hôte est que l'objet html n'a pas d'événement onload. Object Element reference.


Eh bien, puisque la documentation ne semble pas refléter la réalité que vous êtes de gauche appelant la méthode javascript à partir du contrôle silverlight lui-même. Il suffit de passer un ID comme l'un des paramètres init.

+0

Il serait intéressant que l'expéditeur de l'événement onload soit l'élément objet, ce qui n'est malheureusement pas le cas. Il a le type "UserControl" et le nom "Layout" racine. Cependant, je n'arrive pas à comprendre comment naviguer de cet élément à l'objet conteneur. – AnthonyWJones