2015-10-17 2 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

Возможный дубликат [Как выполнить функцию обратного вызова Javascript из хост-приложения C#] (http://stackoverflow.com/questions/21138740/how-can-i-execute-javascript-callback-function-from-c- sharp-host-application) –

+0

Что означает «вернуть ... в приложение C#»? C# покинул изображение задолго до того, как JavaScript будет выполнен в браузере клиента. Вам нужно будет сделать новый HTTP-запрос для вашего приложения, возможно, со значением 'x' в качестве параметра строки запроса. – 76484

+0

@ 76484 Итак, я просто вызываю скрипт из C#. Мое приложение синхронно, а API, который я использовал, - нет, поэтому я хочу сделать что-то, чтобы функция 'B()' отображалась как синхронная и возвращала значение после того, как все сделано в 'A()'. – dahui

ответ

0

Я предполагаю, что вы вызвали функцию Javascript, вызвав метод WebView InvokeScriptAsync с именем функции Js в качестве параметра.

Проблема в том, что ваша функция JavaScript является асинхронной, поскольку она использует обещание - поэтому вы не можете просто получить ее возвращаемое значение на C#. Операция IAsyncOperation завершается, когда объект обещания возвращен, а не так, как он был разрешен.

Если Javascript функция была synchronious:

Ответный значение функции InvokeScriptAsync является строка результат вызова сценария - так что если вы будете ждать его, вы получите результат.

MSDN документация: https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx?f=255&MSPPError=-2147217396

Однако, вы всегда можете вызвать Webview событие, вызвав windows.external.invoke с параметром строки из JavaScript и получить его на C#, подписавшись на WebView ScriptNotify событие.

Смежные вопросы