Silverlight 4 MVVM:从viewmodel调用Javascript函数

时间:2011-06-06 13:30:24

标签: javascript silverlight mvvm

我们已经开发了Silverlight 4的Intranet管理应用程序。我们被要求添加调用远程桌面工具的功能,该工具使用Intranet SL App安装在客户端上。在用ASP.NET编写的早期版本的工具中,我们只是向aspx页面添加了一个Javascript函数,如下所示:

function RunShellCommand()
 {
        var launcher = new ActiveXObject("WScript.Shell");
        launcher.Run("mstsc.exe");
    }

并从ASP.NET调用它。

现在很明显SL4正在沙盒中运行,我无法使用AutomationFactory来创建WScript.Shell对象(不能选择浏览器模式)。

我认为我可以绕过这个问题,再次在托管SL4控件的aspx页面中添加RunShellCommand javascript方法并通过

调用它
HtmlPage.RegisterScriptableObject("Page", this);

HtmlPage.Window.Invoke("RunShellCommand", "dummydata");

来自我的ViewModel。当我运行应用程序时,调试器只是跳过RegisterScriptableObject方法并退出。什么都没发生。 我的问题是,如果我做错了,或者这样做不会这样做。 我是否有可能从viewmodel中执行RegisterScriptableObject?

编辑:当我明确地尝试使用catch块来解决这两个方法时,我从第一个方法得到一个ArgumentException,声明当前实例没有可脚本化的成员。当我删除第一个方法并且只运行Invoke时,我收到一个浏览器错误,指出自动化服务器无法创建该对象。那么真的没办法(除了OOB模式)吗?

1 个答案:

答案 0 :(得分:0)

是的,解释是正确的:您应该添加至少一个带有ScriptableMember属性的方法,以便您可以使用RegisterScriptableObject方法。但它仅用于从JavaScript调用C#-methods。

据我所知,你想做相反的事情:从Silverlight应用程序调用JavaScript代码。那你只需要一行:

HtmlPage.Window.Invoke("RunShellCommand");

错误automation server cant create the object与Silverlight无关。我敢肯定,如果直接调用JS函数 - 错误将保留。 根据互联网,原因可能没有安装Microsoft Windows Script。或者是因为浏览器的安全限制。