LoadFileUrl 和 LoadHtmlString 不加载本地文档资源
LoadFileUrl and LoadHtmlString not loading local document resources
基本上使用使用 WKWebview 的 HybridWebView 我正在加载一个 html 文件,其中包含一堆 css 文件,这些文件存储在应用程序文档目录中。
例子
var/mobile/Containers/Data/Application/C9D9BB56-79B6-4990-A599-18C6AD928A22/Documents
我可以使用 LoadFileUrl 或 LoadHTMLString 加载 html 就好了,问题是引用的 css 和 js 没有加载到 webview
这是我的文件url
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
基地Url
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
您可以通过NSFileManager.DefaultManager.GetUrl
获取文档目录。
从 App 的文档目录
加载示例"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 示例网站
注意:已下载到 NSSearchPathDirectory.DocumentDirectory
中的 WebSite
子目录
├── css
│ └── site.css
├── fonts
│ └── segoeuil.ttf
├── img
│ ├── cloneWhite.svg
│ ├── deployWhite.svg
│ ├── lightbulbWhite.svg
│ ├── stackWhite.svg
│ ├── successCloudNew.svg
│ └── tweetThis.svg
└── index.html
本地输出:
在Objective-CObjective-C中使用WebKit WKWebView从文件系统的应用程序的缓存目录加载本地存储的网站或html-文件=11=]
注意非常重要的 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];
基本上使用使用 WKWebview 的 HybridWebView 我正在加载一个 html 文件,其中包含一堆 css 文件,这些文件存储在应用程序文档目录中。 例子
var/mobile/Containers/Data/Application/C9D9BB56-79B6-4990-A599-18C6AD928A22/Documents
我可以使用 LoadFileUrl 或 LoadHTMLString 加载 html 就好了,问题是引用的 css 和 js 没有加载到 webview
这是我的文件url
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
基地Url
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
您可以通过NSFileManager.DefaultManager.GetUrl
获取文档目录。
从 App 的文档目录
加载示例"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 示例网站
注意:已下载到 NSSearchPathDirectory.DocumentDirectory
WebSite
子目录
├── css
│ └── site.css
├── fonts
│ └── segoeuil.ttf
├── img
│ ├── cloneWhite.svg
│ ├── deployWhite.svg
│ ├── lightbulbWhite.svg
│ ├── stackWhite.svg
│ ├── successCloudNew.svg
│ └── tweetThis.svg
└── index.html
本地输出:
在Objective-CObjective-C中使用WebKit WKWebView从文件系统的应用程序的缓存目录加载本地存储的网站或html-文件=11=]
注意非常重要的 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];