xamarin.forms webview baseurl无法在设备上工作(iOS 10.1)

时间:2016-11-24 19:48:32

标签: xamarin.ios xamarin.forms

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

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

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

CREATE TRIGGER [dbo].[TR_dbo_Customers_InsertUpdateDelete] 
ON [dbo].[Companies]
AFTER INSERT, UPDATE, DELETE AS 

BEGIN 

UPDATE [dbo].[Customers]
SET [dbo].[Customers].[UpdatedAt] = CONVERT(DATETIMEOFFSET, SYSUTCDATETIME()) FROM INSERTED 
WHERE inserted.[Id] = [dbo].[Customers].[Id] 
END

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

    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;
    }

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

1 个答案:

答案 0 :(得分: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,这可行。