2016-11-24 60 views
1

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

但是,我升级到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图书馆读/写本地存储。

回答

0

我觉得LoadHtmlString被打破由编写HTML字符串到本地文件加载本地的CSS/JS等

我解决这个问题的工作,然后用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,这个工程。

相关问题