【问题标题】:Xamarin.Forms ERR_FILE_NOT_FOUND (file:///android_asset/Content/https://stackoverflow.com) using HybridWebViewSampleXamarin.Forms ERR_FILE_NOT_FOUND (file:///android_asset/Content/https://stackoverflow.com) 使用 HybridWebViewSample
【发布时间】:2020-07-05 02:19:39
【问题描述】:

我按照帖子创建了一个自定义 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 似乎不适用于外部页面!

有什么建议吗?

【问题讨论】:

  • LoadUrl 方法加载由 HybridWebView.Uri 属性 (index.html) 指定的 HTML 文件。代码指定文件存储在项目的 Asset>Content 文件夹中。您可以从 MS 文档下载源文件以供参考。当你加载https://www.google.es 时你想做什么?在 webview 中执行网站?
  • 是的,我想加载一个外部网站(我的)并与该网站的 javascript 交互。例如:我在网络上发布了一个 HTML 聊天,我想从 Xamarin 访问地理位置和摄像头(例如),以将我的地理位置、摄像头屏幕截图、验证实体等发送到聊天。 P.D.:对 DOM 的访问对我来说总是有效的。
  • external website是自己做的html文件吗?如果是,请将其放入 Assets 文件夹中。它将调用invokeCSharpAction 与该站点的javascript 交互。您可以检查链接以创建网页。 docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…
  • 外部网站是我的,但它是 ASP dotnetcore 项目的一部分。我无法放入 Assets 文件夹。 :(
  • 感谢分享。您可以分享答案并接受它。

标签: xamarin.forms webview custom-renderer


【解决方案1】:

已解决:

更改 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);
    }
} 

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 2016-07-20
    • 1970-01-01
    • 2019-09-20
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多