1

我在页面中嵌入了两个 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 + "}"将返回函数附加到 onload 事件。

4

2 回答 2

3

您的目标是在 javascript 中获取 initparams,然后对其进行处理吗?如果是这样,您可以这样做:

sender.getHost().InitParams

getHost() 返回实际的插件对象,请参阅 msdn 页面了解更多详细信息。除非您将其设置为 initparam,否则我不知道获取对象 ID 的方法。

于 2009-09-09T20:40:12.010 回答
0

那么您的第一个调用点应该是silverlight.js 参考

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

SL 无法从主机获得更多帮助的原因是 html 对象没有 onload 事件。对象元素参考。


好吧,由于文档似乎没有反映现实,因此您只能从 silverlight 控件本身调用 javascript 方法。只需传入一个 id 作为 init 参数之一。

于 2009-09-09T08:31:39.943 回答