【问题标题】:xamarin.forms webview baseurl not working on device (iOS 10.1)xamarin.forms webview baseurl 在设备上不起作用(iOS 10.1)
【发布时间】:2016-12-21 07:06:15
【问题描述】:

我有一个使用 HybridWebView (https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/hybridwebview/) 来显示 html 文档的 xamarin.forms 应用程序。我使用 baseUrl 将本地 css 和 js 加载到文档中。此代码在 iOS 9.x 上运行良好。

但是,在我升级到 iOS 10 后,代码在 iOS 模拟器上运行,但在实际设备上却不行。在设备上,它不会从本地存储加载 css。

这是我正在使用的测试代码。它适用于模拟器,但不适用于设备。

    async void Handle_TestButtonClicked (object sender, System.EventArgs e)
    {
        string css = @"
            body {
                background-color: powderblue;
            }
            h1 {
                color: blue;
            }
            p {
                color: red;
            }
            ";
        var folder = await AppGlobals.AppStorage.GetContentFolder ();
        string filename = "styles.css";
        await AppGlobals.AppStorage.WriteToFile (folder, filename, css);

        string html = @"<!DOCTYPE html>
                        <html>
                        <head>
                          <link rel=""stylesheet"" href=""styles.css"">
                        </head>
                        <body>

                        <h1>This is a heading</h1>
                        <p>This is a paragraph.</p>

                        </body>
                        </html>";

        this.DocumentView.Html = html;
    }

在HybridWebView中,我使用下面的代码来设置baseUrl

            if (Element.Html != null) {
                string baseFolderPath = await AppStorage.GetInstance ().GetContentFolderPath ();
                var baseUrl = new NSUrl (baseFolderPath, true);
                Control.LoadHtmlString (Element.Html, baseUrl);
            }

我正在使用 PCLStorage 库来读取/写入本地存储。

【问题讨论】:

    标签: xamarin.ios xamarin.forms


    【解决方案1】:

    我认为 LoadHtmlString 因加载本地 css/js 等而损坏。

    我通过将 HTML 字符串写入本地文件然后使用 LoadFileUrl 加载它来解决这个问题。这按预期工作

    if (!String.IsNullOrEmpty (Element.Uri)) {
                        string filePath = await GetFilePathInContentFolderFromUri (Element.Uri);
                        var fileUrl = new NSUrl (filePath, false);
                        Control.LoadFileUrl (fileUrl, fileUrl);
                    }
    

    另一种解决方法可能是将所需的 css/js 注入 html 文档本身并仍然使用 LoadHtmlString,这可行。

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2016-08-19
      • 1970-01-01
      • 2014-10-10
      相关资源
      最近更新 更多