来自silverlight app
public MainPage()
{
InitializeComponent();
HtmlPage.RegisterScriptableObject("MainPage", this);
}
[ScriptableMember]
public void StartEditLocation(string name, int? top, int? left)
{
MapTitle.Text = "Set Contract Location - " + name;
LocationEllipse.SetValue(Canvas.LeftProperty, left ?? 30);
LocationEllipse.SetValue(Canvas.TopProperty, top ?? 30);
}
来自javascript
<object data="data:application/x-silverlight-2," id="admin_map" type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="/ClientBin/AdminMap.xap"/>
<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>
function show_map(top, left) {
var control = document.getElementById("admin_map");
var values = new Array();
values[0] = $('#Name').val();
values[1] = top;
values[2] = left;
if (control)
control.Content.MainPage.StartEditLocation(values);
else
alert('Error loading map');
}
实际调用该方法似乎是一个问题,因为它通过if检查以确保控件存在。我认为它必须是一些语法错误或类似的简单。
答案 0 :(得分:0)
您正在传递javascript数组而不是值。试试这个:
control.Content.MainPage.StartEditLocation($('#Name').val(), top, left);
答案 1 :(得分:0)
我发现了问题,默认情况下我有隐藏的银光,因此它从未真正初始化。当我看到它并立即在页面加载时使用javascript隐藏它,它会立即初始化并成功调用该方法。
答案 2 :(得分:0)
您还可以防止在卸载的silverlight控件上调用该方法。
function show_map(top, left) {
var control = document.getElementById("admin_map");
var values = new Array();
values[0] = $('#Name').val();
values[1] = top;
values[2] = left;
if (control)
if (control.IsLoaded) {
control.Content.MainPage.StartEditLocation(values);
}
else
alert('Error loading map');
}