我试图使用一个没有.Net SDK的库,但由于我只想用它来返回一个字符串,我想我可以使用它的JS SDK通过创建返回字符串(https://xamarinhelp.com/xamarin-forms-webview-executing-javascript/)的自定义WebView。
我遇到的第一个问题是在将View添加到页面之前不会在Xamarin.Forms中调用CustomRenderer(或者至少我无法调用它)。为了解决这个问题,我在每个平台上添加了对Platform.CreateRenderer的调用。
它完成了技巧并且执行了CustomRenderer。但是当我试图调用一个JS函数来检索字符串时,应用程序只是挂起并保持这种状态。
我没有尝试在页面中插入WebView,因为我希望它独立于应用程序当前所在的页面,因为我想要一个只有代码的#34; HTML,我没有看到将它添加到某处的重点。
JSEvaluator
alert()
UWP渲染器
namespace MyNamespace.Views
{
public class JSEvaluator : WebView
{
public static BindableProperty EvaluateJavascriptProperty = BindableProperty.Create(nameof(EvaluateJavascript), typeof(Func<string, Task<string>>), typeof(JSEvaluator), null, BindingMode.OneWayToSource);
public Func<string, Task<string>> EvaluateJavascript
{
get { return (Func<string, Task<string>>)GetValue(EvaluateJavascriptProperty); }
set { SetValue(EvaluateJavascriptProperty, value); }
}
public JSEvaluator()
{
}
}
}
创建和使用
[assembly: ExportRenderer(typeof(JSEvaluator), typeof(JSEvaluatorRenderer))]
namespace MyNamespace.UWP.Renderers
{
public class JSEvaluatorRenderer : WebViewRenderer
{
public JSEvaluatorRenderer() { }
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
var webView = e.NewElement as JSEvaluator;
if (webView != null)
webView.EvaluateJavascript = async (js) =>
{
return await Control.InvokeScriptAsync("eval", new[] { js });
};
}
}
}
感谢您的帮助:)
答案 0 :(得分:1)
我必须将WebView添加到页面中,正如@SushiHangover在评论中所说的那样。完成后,它按预期工作。