2011-06-06 83 views
1

我们已经开发了一个带有Silverlight 4的Intranet管理应用程序。我们被要求添加功能来调用使用Intranet SL App安装在客户端上的远程桌面工具。在用ASP.NET编写的工具的早期版本,我们只是增加了一个JavaScript函数来aspx页面像这样:Silverlight 4 MVVM:从viewmodel调用Javascript函数

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

,并呼吁从ASP.NET。

现在很清楚,SL4正在沙箱中运行,并且我无法使用AutomationFactory创建WScript.Shell对象(浏览器模式不是选项)。

我想我可以圈住的问题,再次加入RunShellCommand在该SL4控制托管aspx页面的JavaScript方法,并通过

HtmlPage.RegisterScriptableObject("Page", this); 

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

从我的ViewModel调用它。当我运行应用程序时,调试器跳过RegisterScriptableObject方法并退出。什么都没发生。 我的问题是如果我做错了什么或者如果这只是不会这样工作。 有没有可能我不能从视图模型做一个RegisterScriptableObject?

编辑:当我明确地尝试,围绕这两个方法的catch块,我从第一个方法中得到一个ArgumentException,指出当前实例没有可编写脚本的成员。当我删除第一个方法并只运行调用时,我得到一个浏览器错误,指出自动化服务器不能创建对象。那么是否真的没有办法(除了OOB模式)来做到这一点?

回答

0

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

就我所见,您想做相反的事情:从Silverlight应用程序调用JavaScript代码。然后你只需要一条线:

HtmlPage.Window.Invoke("RunShellCommand"); 

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

+0

它确实是浏览器的安全设置。 – hoetz 2011-06-07 06:30:26