积极答复者
SilverLight插件xap包跨域问题

问题
-
先谢谢各位高手。
问题简述:页面中嵌入一个silverlight插件,用javascript写了一个silverlight的onload方法。
当sl插件的source属性指定的url是与页面的url域相同时,其onload事件可以接收到正常的sender参数,当source属性指定的url与页面url域不同时,事件的sender参数是undefined。而且已经实行了跨域访问的策略了。
问题详述:
首先有一个网站,页面地址类似这样:http://localhost:3794/SilverlightApplication3TestPage.aspx
然后在这个aspx页面中有一个sl插件,比如
<object id="mySL" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="http://localhost:3794/ClientBin/SilverlightApplication3.xap"/>
<param name="onLoad" value="onSilverlightLoad" />
<param name="enableHtmlAccess" value="true" />
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
最后onload事件是这样:function onSilverlightLoad(sender) {alert(sender);}如上面代码的情况时onSilverlightLoad事件处理函数的sender是正常的,而当把xap放到另一个网站下,把source属性改为类似这样:http://localhost:8008/ClientBin/SilverlightApplication3.xap的时候,sender就变成了undefined。我做的跨域工作有:在web根目录下增加了clientaccesspolicy.xml文件,在AppManifest.xmal中为Deployment增加了ExternalCallersFromCrossDomain="ScriptableOnly"属性。同时如上面代码所显示,<param name="enableHtmlAccess" value="true" />属性也存在。很简单就可以做出这一问题的demo,可是却难以解决。望指教!
- 已编辑 哈佛洛克 2011年11月1日 5:59
答案
-
这个还真的不行。
因为它不在你当前的WebApp中。你要么在localhost:8008下面放一个ClientBin目录,然后把localhost:3794的文件copy过来。要么你在Silverlight里调用JS代码。
努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!- 已标记为答案 Daoping Liu - MSFTModerator 2011年11月9日 3:19
-
<UserControl x:Class="SilverlightApplication6.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <Button Content="Button" Height="23" HorizontalAlignment="Left" Click="button1_Click" Margin="202,120,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> </Grid> </UserControl>
using System.Windows; using System.Windows.Controls; using System.Windows.Browser; namespace SilverlightApplication6 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { var hello = HtmlPage.Window.Invoke("onSilverlightLoad",new object[]{ this}); } } }
努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!- 已标记为答案 Daoping Liu - MSFTModerator 2011年11月9日 3:19
全部回复
-
这个还真的不行。
因为它不在你当前的WebApp中。你要么在localhost:8008下面放一个ClientBin目录,然后把localhost:3794的文件copy过来。要么你在Silverlight里调用JS代码。
努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!- 已标记为答案 Daoping Liu - MSFTModerator 2011年11月9日 3:19
-
<UserControl x:Class="SilverlightApplication6.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <Button Content="Button" Height="23" HorizontalAlignment="Left" Click="button1_Click" Margin="202,120,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> </Grid> </UserControl>
using System.Windows; using System.Windows.Controls; using System.Windows.Browser; namespace SilverlightApplication6 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { var hello = HtmlPage.Window.Invoke("onSilverlightLoad",new object[]{ this}); } } }
努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!- 已标记为答案 Daoping Liu - MSFTModerator 2011年11月9日 3:19