我有一个使用C#的Silverlight应用程序,有两个主要功能,我想通过JavaScript函数访问它们。我在类中完成了RegisterScriptableObject()并为我想要访问的函数设置了[ScriptableMember]。
这是Silverlight对象:
<div id="silverlightControlHost">
<object id="silverlightControl" data="data:application/x-silverlight," type="application/x-silverlight-2" width="1024px" height="300px">
<param name="source" value="DrawingWaveForm.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>
<iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>
这些是我的JavaScript函数:
function Start()
{
var control = document.getElementById("silverlightControl");
control.Content.Page.Start();
}
function Stop()
{
var control = document.getElementById("silverlightControl");
control.Content.Page.Stop();
}
任何人都可以告诉我哪里出错了,因为它似乎无法正常工作
答案 0 :(得分:2)
正如timheuer所说,[Scriptable]在您的Silverlight方法上。
在班上打电话:
HtmlPage.RegisterScriptableObject("Page", this);
从您的javascript中调用标记为Scriptable的Silverlight方法,如下所示:
function CenterMap(latitude, longitude)
{
var silvercontrol = document.getElementById("ctl00_cphMain_slControl");
if (silvercontrol)
silvercontrol.Content.Page.CenterOnCoordinates(latitude, longitude);
}
This page向您展示了这一点以及如何反向,从Silverlight调用javascript方法。这是一个非常好的模型。
答案 1 :(得分:1)
您需要确保将C#函数标记为Scriptable。有关如何完成此操作的详细信息,请参阅http://silverlight.net/learn/learnvideo.aspx?video=65683。
答案 2 :(得分:0)
这只是一个想法,但您是否需要公开这些方法(它们似乎不在您的代码中)?
答案 3 :(得分:0)
我自己就是在解决这个问题。第一个js函数有效,但其他一切都会抛出此错误。在修补之后,我注意到更改成功运行的底层C#函数没有任何影响 - 浏览器正在使用Silverlight控件的缓存版本。尝试清除浏览器的缓存。