【问题标题】:Issue with opening local web page from other local one on Xamarin.UWP从 Xamarin.UWP 上的其他本地网页打开本地网页的问题
【发布时间】:2021-12-29 10:25:38
【问题描述】:

在 Xamarin.Forms 项目中,我得到了本地网页的帮助。在线不是一种选择,因为我正在使用的产品将在没有互联网连接的地方使用。使用 Xamarin 的 WebView 加载网页。这是代码示例。

var files = DependencyService.Get<IFiles>();
var webView = new WebView();
webView.Source = Path.Combine(files.GetBaseUrl(), "HelpFolder", "index.htm");
Content = helpHTMLView; //Assigning to page content

GetBaseUrl() iOS

    public string GetBaseUrl() => NSBundle.MainBundle.BundlePath;

GetBaseUrl() 安卓

    public string GetBaseUrl() => "file:///android_asset/";

GetBaseUrl() UWP

    public string GetBaseUrl() => "ms-appx-web:///";

Xamarin Android 和 iOS 版本的帮助正在正确加载(HTML、CSS 和 JavaScript)。当我在两个平台上单击页面上的链接时,会加载下一个本地网页。

但是在 Xamarin.UWP 上,我无法使用相同的代码从本地链接打开本地网页。我可以打开有一些问题的第一个网页。但是,当我单击页面上的链接时,我收到以下消息。

我必须进行哪些配置才能允许加载其他本地网页? Xamarin 的文档建议加载文件,但似乎太尴尬了。使用文档中的示例仅加载没有 CSS 和脚本的 HTML。理想的解决方案是只为本地路径提供一个地址,然后一个页面就会打开。

【问题讨论】:

  • 您是否点击了以下链接? docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/…你遇到了什么问题?您能否提供更多细节供我们复制?
  • 我一直在页面上。我在平台相关项目中有平台相关的基本 uri 和网页。但是我不使用 HtmlWebViewSource。我使用绑定到属性将路径(基本 uri + 文件夹 + 主页)分配给 WebView.SourceProperty。它适用于 Android 和 iOS 设备。为了重现问题,使用脚本、CSS 创建链接网页并保存在平台相关项目的某个文件夹中。然后尝试从应用程序访问它。

标签: xamarin.forms webview xamarin.uwp


【解决方案1】:

但是我不使用 HtmlWebViewSource。我使用绑定到属性将路径(基本 uri + 文件夹 + 主页)分配给 WebView.SourceProperty。

可以使用字符串 URL 设置 WebView 的 Source 属性以显示来自 Internet 的网站。请注意,URL 必须使用指定的协议完全形成(即,必须在其前面加上“http://”或“https://”)。

按照 MS 文档使用 HtmlWebViewSource 设置 BaseUrl 属性。文档将 html 文件放在项目根目录中,并将构建操作设置为 Content。

如果要将文件放在 Xamarin.UWP 项目的文件夹中,可以将 BaseUrl 更改为 ms-appx-web:///html///html 是文件夹的名称。

加载 Html CS 代码:

 public partial class MainPage : ContentPage
{
    public interface IBaseUrl { string Get(); }
    public MainPage()
    {
        InitializeComponent();

        var browser = new WebView();
        var htmlSource = new HtmlWebViewSource();

        //htmlSource.Html = @"<html>
        //                    <head>
        //                    <link rel=""stylesheet"" href=""default.css"">
        //                    </head>
        //                    <body>
        //                    <h1>Xamarin.Forms</h1>
        //                    <p>The CSS and image are loaded from local files!</p>
        //                    <img src='XamarinLogo.png'/>
        //                    <p><a href=""local1.html"">next page</a></p>
        //                    </body>
        //                    </html>";

        htmlSource.BaseUrl = DependencyService.Get<IBaseUrl>().Get() + "local1.html";//local1 is the html file in html folder

        browser.Source = htmlSource;
        Content = browser;
    }
}

BaseUrl:

[assembly: Dependency(typeof(BaseUrl))]
namespace App16.UWP
{ 
    public class BaseUrl : IBaseUrl
    {
        public string Get()
        {
            return "ms-appx-web:///html///";
        }
    }
}

【讨论】:

  • 我尝试了解决方案。我使用了 htmlwebviewsource 并使用 BaseURL 从文件中加载了 HTML。但是,它只加载没有 CSS 和 JavaScript 的 HTML,这与加载下一个本地页面的问题相比要糟糕得多。 CSS 和 JavaScript 在主页面的子文件夹中。
  • 不要只给我描述。你能提供你想要的代码sn-p吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多