如何将 WebView 无头与 Xamarin 一起使用



即使活动不可见,我也想运行一些javascript。我无法在活动上创建 WebView,因为活动可能会被销毁并且 WebView 会被垃圾回收,因此我想创建一个未附加到活动的无外设 WebView。

我试过这个:

webworker = new Xamarin.Forms.WebView();
Xamarin.Forms.HtmlWebViewSource html = new Xamarin.Forms.HtmlWebViewSource();
html.Html = "<!DOCTYPE html>rn"+
"<html><head><script type="text/javascript">rn"+
"function timer(){rn"+ 
" window.setTimeout(function(){rn"+ 
" console.log("webworker is alive");rn"+ 
" timer();rn"+ 
"}, 1000);rn"+ 
"}rn"+ 
"timer();rn" +
"</script>rn"+ 
"</head></html>";
webworker.Source = html;
webworker.Eval("timer();");

但它不执行javascript。我不确定如何让它运行?

在安卓中,webview 默认会屏蔽 JS 事件。因此,您可以使用自定义渲染器.

在您的安卓项目中

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Webkit;
using Android.Widget;
using xxx;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(MyWebViewRenderer))]
namespace xxx.Droid
{
public class MyWebViewRenderer:WebViewRenderer
{
public MyWebViewRenderer(Context context):base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Android.Webkit.WebView webview =(Android.Webkit.WebView) Control;
WebSettings settings = webview.Settings;

settings.JavaScriptEnabled = true;
}
}
}
}

最新更新