跨域引用Silverlight相關(guān)問(wèn)題解疑
Silverlight開(kāi)發(fā)工具的應(yīng)用領(lǐng)域比較廣發(fā)。不過(guò)即使是這樣一款功能強(qiáng)大的工具,在使用的時(shí)候同樣也會(huì)造成一些問(wèn)題的產(chǎn)生。比如跨域引用Silverlight時(shí),就會(huì)出現(xiàn)一些令人頭疼的問(wèn)題??缬蛞肧ilverlight,即將Silverlight包部署在A域下,卻由在B域下的網(wǎng)站引用。其中Silverlight通過(guò)HTML.Window調(diào)用了腳本方法。#t#
示例代碼
- public partial class Page :
UserControl - {
- public Page()
- {
- InitializeComponent();
- }
- private void Button_Click
(object sender, RoutedEventArgs e) - {
- HtmlPage.Window.Alert("hi");
- }
- }
跨域引用Silverlight異常描述
進(jìn)入B域頁(yè)面,沒(méi)有看到Silverlight展現(xiàn),右鍵點(diǎn)擊相應(yīng)區(qū)域,顯示“Silvelight”,說(shuō)明Silverlight區(qū)域已經(jīng)被渲染出來(lái)。通過(guò)HTTP Watch查看,發(fā)現(xiàn)Xap包已經(jīng)被請(qǐng)求并下載下來(lái),但就是沒(méi)有展現(xiàn)。
Silverlight正常顯示,但點(diǎn)擊按鈕后,并不彈出對(duì)話框。調(diào)試發(fā)現(xiàn),在HtmlPage.Window.Alert("hi");拋出異常,異常信息為“已禁用DOM/腳本橋”。
跨域引用Silverlight問(wèn)題解決
加載卻不展示,是由于在A網(wǎng)站下沒(méi)有給Silverlight配置正確的MIME類(lèi)型。當(dāng)引用不同域下的Silverlight包,Silverlight Runtime會(huì)檢測(cè)XAP的HTTP頭中的MIME類(lèi)型。正確的類(lèi)型是“application/x-silverlight-app”,如果配為“application/x-silverlight-2”(這似乎是舊版本的MIME配置),同樣不能正常顯示。IIS7由于默認(rèn)帶有Xap的MIME類(lèi)型配置,所以不會(huì)出現(xiàn)此類(lèi)問(wèn)題。
不能正常彈出Alert對(duì)話框,但如果改成MessageBox.Show("Click");卻可以正常運(yùn)行。這是因?yàn)樾枰渲肧ilverlight以及Host Silverlight的頁(yè)面的幾個(gè)參數(shù),使得Silverlight中的ManagedCode和頁(yè)面中的Javascript和DOM code可以交互。而在同域下,這幾個(gè)參數(shù)或者是默認(rèn)配置好的,或者就是干脆無(wú)效,所以不需要配置。具體可參考(Security Settings in HTML Bridge),具體到這里的情況,就是要在頁(yè)面中配置enableHtmlAccess屬性,使在Silverlight的Manage code里可以操縱外部Dom對(duì)象。
Asp.net頁(yè)面:
- < asp:Silverlight ID="Xaml1" HtmlAccess="Enabled"
runat="server"Source=http://localhost:2300/
ClientBin/SilverlightApplication.xap
MinimumVersion="2.0.31005.0" Width="100%"
Height="100%" />HTML頁(yè)面:- < object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2"
width="80%" height="80%" >- < param name="enableHtmlAccess" value="true" />
- < param name="source" value="http://
localhost:2300/ClientBin/Silverlight
Application.xap"/>- < param name="onerror" value="onSilverlightError" />
- < param name="background" value="white" />
- < param name="minRuntimeVersion"
value="2.0.31005.0" />- < param name="autoUpgrade" value="true" />
- < a href="http://go.microsoft.com/
fwlink/?LinkID=124807" style="text-
decoration: none;">- < img src="http://go.microsoft.com/
fwlink/?LinkId=108181" alt="Get Microsoft
Silverlight" style="border-style: none"/>- < /a>
- < /object>
以上就是我們?yōu)榇蠹規(guī)?lái)的跨域引用Silverlight相關(guān)問(wèn)題解決辦法。