Silverlight 3 onload事件绑定多个实例

时间:2009-09-08 15:16:34

标签: javascript silverlight silverlight-3.0 onload

我在页面中嵌入了两个silverlight实例,如下所示(内容仅限于相关详细信息): -

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

正如您所看到的,objects指向同一个xap,但在initParams中会有不同的内容。

但请注意,onload参数指向相同函数名称。此问题的这一特定部分是不变

在全球范围的javascript中,我有: -

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

目标是取sender并确定哪个对象元素是事件的来源。直截了当(但为了这个问题不可接受)的答案是使用两种不同的功能。我正在寻找一些不需要将新函数添加到每个SL对象的全局命名空间的东西。

奖励,任何能告诉我为什么SL无法从主机浏览器获得更多帮助并且更像其他元素事件(如onlick)处理onload参数的人会感到荣幸。例如,要求浏览器eval("function() {" + onload + "}"并将return函数附加到onload事件。

2 个答案:

答案 0 :(得分:3)

你的目标是在javascript中获取initparams然后用它做点什么吗?如果是这样,你可以这样做:

sender.getHost().InitParams

getHost()返回实际的插件对象see msdn page for more details。除非您将其设置为initparam,否则我不知道获取对象ID的方法。

答案 1 :(得分:0)

你的第一个电话应该是silverlight.js reference

基本上你的“silverlight_onload”javascript函数将作为发送者获取实际的html对象元素,因此检查它的id是什么,你将拥有我想你想要的东西。

SL无法从主机获得更多帮助的原因是html对象没有onload事件。 Object Element reference.


好了,因为文档似乎没有反映现实,所以你要从silverlight控件本身调用javascript方法。只需传入一个id作为init参数之一。