我在页面中嵌入了两个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事件。
答案 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参数之一。