2009-09-08 19 views
1

我有嵌入在網頁在兩次Silverlight的情況下,像如下(內容simplfied只有相關的細節): -Silverlight 3的onload事件綁定多個實例

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

正如你可以在同一XAP看到兩個objects點,但initParams中會有不同的內容。

但是請注意,onload param指向相同的函數名稱。這個問題的這種特殊的部分是不變

其他地方的JavaScript在全球範圍內,我有: -

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

的目標是採取sender,並確定哪些對象元素的是事件的源頭。直截了當(但爲了這個問題不可接受)的答案將是使用兩種不同的功能。我正在尋找一些不需要將新功能添加到每個SL對象的全局名稱空間的東西。

獎金,榮譽去的人誰可以告訴我爲什麼SL無法從主機瀏覽器多一點幫助和處理的onload參數更喜歡像其他點擊數元素的事件。例如,讓瀏覽器訪問eval("function() {" + onload + "}"並將返回函數附加到onload事件。

回答

3

是您的目標,應在JavaScript的initParams在,然後用它做什麼?如果是這樣,你可以這樣做:

sender.getHost().InitParams 

的和getHost()返回實際的插件對象see msdn page for more details。除非將其設置爲initparam,否則我不知道如何獲取對象的ID。

+0

getHost()就是我所追求的,它會返回託管當前運行事件的插件的特定對象元素。因此,我可以使用它來將程序流引導到元素的正確代碼。 – AnthonyWJones 2009-09-29 15:37:14

0

嗯,你的第一個停靠點應該是silverlight.js reference

基本上你的「silverlight_onload」 javascript函數是會得到作爲發件人的實際HTML對象元素,所以檢查它的id是和你有什麼,我認爲你想要的。

SL無法從主機獲得更多幫助的原因是該html對象沒有onload事件。 Object Element reference.


好,因爲文件似乎沒有反映現實留給你從Silverlight控件本身調用JavaScript方法。只需傳入一個id作爲初始參數之一。

+0

如果onload事件發件人爲對象元素不幸的是並非如此這將是整齊。它具有「用戶控件」類型和名稱「佈局」根目錄。然而,我不知道如何從那裏導航到包含對象元素。 – AnthonyWJones 2009-09-09 12:41:38