【问题标题】:Silverlight 4 MVVM: Call Javascript function from viewmodelSilverlight 4 MVVM:从视图模型调用 Javascript 函数
【发布时间】:2011-06-06 13:30:23
【问题描述】:

我们使用 Silverlight 4 开发了一个 Intranet 管理应用程序。我们被要求添加调用远程桌面工具的功能,该工具安装在使用 Intranet SL 应用程序的客户端上。在用 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 方法并退出。没发生什么事。 我的问题是如果我做错了什么,或者这不会以这种方式工作。 是否有可能我不能从视图模型中执行 RegisterScriptableObject?

编辑:当我明确地在两个方法周围放置一个 try, catch 块时,我从第一个方法中得到一个 ArgumentException,说明当前实例没有可编写脚本的成员。当我删除第一个方法并仅运行 Invoke 时,我收到一个浏览器错误,指出自动化服务器无法创建对象。那么真的没有办法(OOB模式除外)吗?

【问题讨论】:

    标签: javascript silverlight mvvm


    【解决方案1】:

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

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

    HtmlPage.Window.Invoke("RunShellCommand");
    

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

    【讨论】:

    • 确实是浏览器的安全设置,天哪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多