LoadFileUrl和LoadHtmlString未加载本地文档资源

问题描述 投票:1回答:2

基本上使用使用WKWebview的HybridWebView,我正在下载一个html文件,其中包含一堆css文件,这些文件存储在应用程序文档目录中。范例

var / mobile /容器/数据/应用程序/ C9D9BB56-79B6-4990-A599-18C6AD928A22 /文档

我可以使用LoadFileUrl或LoadHTMLString很好地加载html,问题是所引用的CSS和js不会加载到webview中

这是我的文件网址

file:///var/mobile/Containers/Data/Application/C9D9BB56-79B6-4990-A599-18C6AD928A22/Documents/Courses/2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c/Online_Placement_Test_no_timer_pack/YKZOP4NACH3EPJNTG6M4T2BQDI/Unit_4_5/995/Unit.html

基本网址

file:///var/mobile/Containers/Data/Application/C9D9BB56-79B6-4990-A599-18C6AD928A22/Documents/Courses/2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c/Online_Placement_Test_no_timer_pack/YKZOP4NACH3EPJNTG6M4T2BQDI/Unit_4_5/995/

这是从Safari的网络检查器获取的未加载资源的路径的示例。

file:///var/mobile/Containers/Data/Application/C9D9BB56-79B6-4990-A599-18C6AD928A22/Documents/Courses/2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c/Online_Placement_Test_no_timer_pack/YKZOP4NACH3EPJNTG6M4T2BQDI/Unit_4_5/995/js/bootstrap.min.js

不确定我在做什么错。我什至设置了

<key>NSAppTransportSecurity</key>
    <dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
        <key>NSAllowsArbitraryLoads</key>
        <true/>    
    </dict>

在info.plist中

ios xamarin xamarin.ios wkwebview
2个回答
0
投票

您可以通过NSFileManager.DefaultManager.GetUrl获取文档目录。

从应用程序的文档目录加载“ WebSite”的示例

var docsDir = NSFileManager.DefaultManager.GetUrl(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User, null, true, out var error);
var data = NSUrl.FromFilename(Path.Combine(docsDir.Path, "WebSite", "index.html"));
var content = NSUrl.FromFilename(Path.Combine(docsDir.Path, "WebSite"));
webView.LoadFileUrl(data, content);

示例从捆绑的资源加载“ WebSite”:

var bundlePath = NSBundle.MainBundle.BundlePath;
var data = NSUrl.FromFilename(Path.Combine(bundlePath, "WebSite", "index.html"));
var content = NSUrl.FromFilename(Path.Combine(bundlePath, "WebSite"));
webView.LoadFileUrl(data, content);

使用下载的Azure示例网站

注意:已下载到WebSite中的NSSearchPathDirectory.DocumentDirectory子目录中

├── css
│   └── site.css
├── fonts
│   └── segoeuil.ttf
├── img
│   ├── cloneWhite.svg
│   ├── deployWhite.svg
│   ├── lightbulbWhite.svg
│   ├── stackWhite.svg
│   ├── successCloudNew.svg
│   └── tweetThis.svg
└── index.html

本地输出:

enter image description here


0
投票

使用iOS13中的Objective-C中的WebKit WKWebView从文件系统的应用程序的缓存目录中加载本地存储的网站或html文件

请注意非常重要的webView.configuration.preferences设置allowFileAccessFromFileURLs!

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *docsDir = [paths objectAtIndex:0];
NSString *downloadDir = [[NSString alloc] initWithFormat:@"%@/%@", docsDir, @"www"];

NSURL* downloadDirUrl = [[NSURL alloc] initFileURLWithPath:downloadDir];
NSLog(@"DIR  '%@'", downloadDirUrl);
NSURL* indexHtmlUrl = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"%@/%@", downloadDir, @"/index.html?param=val"]];
NSLog(@"HTML '%@'", indexHtmlUrl);

WKWebView* webView = ...;
[webView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
[webView loadFileURL:indexHtmlUrl allowingReadAccessToURL:downloadDirUrl];
© www.soinside.com 2019 - 2024. All rights reserved.