我正在编写一个将由C#应用程序调用的Javascript函数。我可以从C#调用该函数,但是无法检索函数的结果。
所以我有以下结构:
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 :(得分:0)
我假设您通过调用WebView方法 InvokeScriptAsync 并使用Js函数名作为参数来调用您的Javascript函数。
这里的问题是你的JavaScript函数是异步的,因为它使用了promise - 所以你不能简单地在C#上获得它的返回值。 IAsyncOperation在返回promise对象时结束,而不是已经解析。
如果你的javascript函数是同步的:
InvokeScriptAsync 函数的返回值是脚本调用的字符串结果 - 因此,如果您等待它,您将获得结果。
但是,您始终可以通过使用JavaScript中的字符串参数调用 windows.external.invoke 来调用webView事件,并通过订阅webView ScriptNotify 事件来获取C#。 / p>