4

我在使用Silverlight託管跨域應用程序時遇到問題。跨域可腳本化Silverlight應用程序

我必須託管在不同的領域,其中包括與下面的HTML代碼到網頁的應用程序:

<script type="text/javascript"> 
function succ(sender, args) { 
    console.log("SUCCESS"); 
    console.log(sender); 
    console.log(args); 
} 
function err(sender, args) { 
    console.log("FAILURE"); 
    console.log(sender); 
    console.log(args); 
} 
</script> 
<object width="400" height="20" id="app" type="application/x-silverlight-2" data="data:application/x-silverlight-2,"> 
    <param name="minruntimeversion" value="4.0.41108.0"/> 
    <param name="autoupgrade" value="false"/> 
    <param name="onerror" value="err"/> 
    <param name="onload" value="succ"/> 
    <param name="enablehtmlaccess" value="true"/> 
    <param name="source" value="http://example.com/app.xap"/> 
</object> 

但如果app.xap應用程序託管在此HTML代碼不同的領域,onLoadsucc函數被調用時不帶參數,所以它記錄以下行:

SUCCESS 
undefined 
undefined 

如果我在上面記錄了正確的路線相同的域名託管:

SUCCESS 
UserControl {} 
undefined 

因此,在第一種情況下,我無法從JavaScript獲取[ScriptableMember]註釋的方法,因爲我沒有任何對應用程序的引用。

AppManifest.xml文件,我包括在由HtmlPage.RegisterScriptableObject方法需要,因爲這屬性:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      ExternalCallersFromCrossDomain="ScriptableOnly" 
> 
    <Deployment.Parts> 
    </Deployment.Parts> 
</Deployment> 

xap的文件傳送與application/x-silverlight-appContent-Type,所以這是要麼不是問題。

我錯過了什麼?

謝謝!

回答

2

讓我們假設你已經註冊了一個名爲「Thingy」的外部對象。

您應該可以通過html對象元素的Content屬性來訪問它。在對象標籤上放置id="mySL"。現在試試這個代碼: -

function succ(sender, args) { 
    console.log("SUCCESS"); 
    console.log(document.getElementById("mySL").Content.Thingy); 
    console.log(args); 
} 

只要確保登記在你的代碼早像你的根視覺使用類的構造函數「啄」。

+0

謝謝您的回覆,我會明天試試,因爲我沒有我的虛擬機器。 – 2010-11-01 17:02:00

+0

我修改了我的Silverlight應用程序和我的成功方法的源代碼,但它不起作用。 :( – 2010-11-02 09:10:54

+1

哦,它的工作原理我不得不把所有的腳本代碼放到我的根視覺類(我不知道爲什麼)。 – 2010-11-02 09:40:49

0

同樣的問題,解決的課題首發在他的評論中描述

我只好把我所有的編寫腳本代碼,我的根視覺類