首页 > 解决方案 > Xamarin.Forms ERR_FILE_NOT_FOUND (file:///android_asset/Content/https://stackoverflow.com) 使用 HybridWebViewSample

问题描述

我按照帖子创建了一个自定义 WebView 以与客户端 JavaScript 交互:https ://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview

但是当我尝试加载页面时,例如https://www.google.es,wevView 显示“ERROR_FILE_NOT_FOUND”加载页面“file:///android_asset/Content/ https://www.google.es "

这是 HybridWebViewRenderer 的 OnElementChanged:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{           
    base.OnElementChanged(e);

    if (e.OldElement != null)
    {
        Control.RemoveJavascriptInterface("jsBridge");
        ((HybridWebView)Element).Cleanup();
    }
    if (e.NewElement != null)
    {
        Control.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
        Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
        Control.LoadUrl($"file:///android_asset/Content/{((HybridWebView)Element).Uri}");
    }
}        

编辑:似乎 hybridWebView 不适用于外部页面!

有什么建议吗?

标签: xamarin.formswebviewcustom-renderer

解决方案


解决了:

更改 LoadUrl 方法:

Control.LoadUrl($"file:///android_asset/Content/{((HybridWebView)Element).Uri}");

经过:

UrlWebViewSource source = Element.Source as UrlWebViewSource;
Control.LoadUrl(source.Url);

适用于外部网络,可以检索 JavaScript 回调并发送 JavaScript 代码。这是完整的代码:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{           
    base.OnElementChanged(e);

    if (e.OldElement != null)
    {
        Control.RemoveJavascriptInterface("jsBridge");
        ((HybridWebView)Element).Cleanup();
    }
    if (e.NewElement != null)
    {
        Control.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
        Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
        UrlWebViewSource source = Element.Source as UrlWebViewSource;
        Control.LoadUrl(source.Url);
    }
} 

推荐阅读