我有一个像下面这样的javascript函数。
var object;
$(document).ready(function () {
$("#buttonA").click(function (e) {
object.doWork(); //triggers a method in Silverlight
});
});
Silverlight中的方法
private void doWork()
{
SaveFileDialog dialog = new SaveFileDialog();
dialog.ShowDialog(); //throws error "Dialogs must be user-initiated"
}
任何想法为什么会抛出错误。我没有在silverlight中的doWork方法中设置任何断点。 javascript中的按钮单击事件似乎是用户启动的事件。请建议解决此问题。
谢谢,
答案 0 :(得分:2)
对话必须是用户启动的,因为Silverlight组件中的用户交互事件(单击,按下按钮等)必须发生对话。 (实际上“由于”实际上是在交互之后必须在一定时期内发生的限制,而不是一些严格的限制,例如与调用堆栈有关)
从Silverlight安全限制的角度来看,这只是一个调用Silverlight的任意javascript方法,因此这是不可能的(有充分理由)。您需要从真正的Silverlight按钮打开对话框。
如果你真的需要从通过javascript调用的Silverlight控件中引出某种对话框,你可能需要实际回调以打开JavaScript / HTML中的对话框(或者在任一环境中使用某种弹出窗口)。