2015-10-17 75 views
0

我在寫一個Javascript函數,它將由C#應用程序調用。我可以從C#調用函數,但一直無法檢索函數的結果。從Javascript中的回調函數獲取結果

所以,我有以下結構:

var B = function() { 
    var A = function() { 
     var dfd = new $.Deferred(); 
      // do something and then return the value I need 
      return dfd.resolve(x); 
     ...... 
     return dfd.promise(); 
    } 
    $.when(A()). 
     then(function(x) { 
      // I can get the x I want here. 
      alert(x); 
      // What to do at this point? 
     }); 
} 

由於A()使用異步方法,我選擇使用jQuery.promise()方法,以確保我得到的A()最終結果。現在我想要B()將值x返回給C#應用程序。有沒有解決這個問題的好方法?

+0

可能重複[如何從C#宿主應用程序執行Javascript回調函數](http://stackoverflow.com/questions/21138740/how-can-i-execute-javascript-callback-function-from-c- sharp-host-application) –

+0

「返回...到C#應用程序」是什麼意思?在客戶端瀏覽器中執行JavaScript之前,C#已經退出了這個圖片。您將需要爲您的應用程序創建一個新的HTTP請求,或許使用'x'的值作爲查詢字符串參數。 – 76484

+0

@ 76484所以我只是從C#調用腳本。我的應用程序是同步的,而我使用的API不是,所以我想做一些讓'B()'函數顯示爲同步並在'A()'完成所有事情後返回值。 – dahui

回答

0

我假設你已經調用了你的Javascript函數,調用WebView方法InvokeScriptAsync,並將Js函數名稱作爲參數。

這裏的問題是,你的JavaScript函數是一個異步,因爲它使用諾言 - 所以你不能簡單地得到它在C#上的返回值。 IAsyncOperation在promise對象已返回時結束,而不是已解決。

如果你的JavaScript函數是synchronious:

InvokeScriptAsync函數的返回值是腳本調用的字符串結果 - 所以,如果你等待它,你會得到的結果。

MSDN文檔:https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx?f=255&MSPPError=-2147217396

但是,你總是可以通過調用windows.external.invoke與JavaScript字符串參數調用webView的事件,並通過訂閱webView的ScriptNotify事件得到它的C#。

相關問題