2011-06-06 85 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