在本机 IOS 应用程序中加载多个 Cordova 微应用程序

Posted

技术标签:

【中文标题】在本机 IOS 应用程序中加载多个 Cordova 微应用程序【英文标题】:Load Multiple Cordova Micro Apps inside Native IOS apps 【发布时间】:2015-11-25 09:02:16 【问题描述】:

我必须根据 Native ios 应用程序中的用户访问权限加载多个 Cordova 应用程序。 我想在应用程序启动时动态加载 zip 文件并将它们存储在 Documents 或 Libraries 文件夹中,然后解压缩这些文件,然后我尝试在我的视图控制器中使用以下代码直接加载 Cordova 视图

CDVViewController* viewController = [CDVViewController new];
viewController.wwwFolderName=@"www";
viewController.startPage=@"abc.html";
viewController.view.frame=CGRectMake(0, 0, 320, 480);
[self.view addSubview:viewController.view];

但问题是,如果我动态指向 Documents 或 Library 文件夹,wwwFolderName 不起作用,它只接受应用程序附带的根文件夹,所以我想知道我应该如何实现这个用例。

【问题讨论】:

可以从 Documents 或 Library 加载 html 内容,但 CDVViewController.wwwFolderName 不准备从那里加载文件。您可以搜索一些下载 html 并加载它的“内容同步”插件,然后检查它们是如何做到的。 【参考方案1】:

如果我的理解正确,这里是一个示例,其中 YOUR_APP_PATH 是目录的字符串路径,您要在其中存储应用程序源,而 YOUR_SEARCH_PATH 是 NSLibraryDirectory 或 NSDocumentsDirectory

- (void)openApp     
    NSString *filePath = [self directoryToApp:YOUR_APP_PATH forSearchPath:YOUR_SEARCH_PATH];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    NSURLRequest *request    = [NSURLRequest requestWithURL: url
                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                       timeoutInterval: 20.0];
    [self.webView loadRequest:appReq request;


- (NSURL *)directoryToApp:(NSString *)appPath forSearchPath:(NSSearchPathDirectory)searchPath
    NSString *basePath = [self applicationDocumentsDirectory:searchPath].absoluteString;
    return [NSURL fileURLWithPath:[basePath stringByAppendingString:appPath]];


- (NSURL *)applicationDocumentsDirectory:(NSSearchPathDirectory)searchPath

    return [[[NSFileManager defaultManager] URLsForDirectory: searchPath
                                                   inDomains: NSUserDomainMask] lastObject];

【讨论】:

【参考方案2】:

让您的 wwwFolderName 如下:

viewController.wwwFolderName=[NSString stringWithFormat: @"file://%@/www", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

这会将起始目录指向文档目录中的 www 文件夹。

【讨论】:

以上是关于在本机 IOS 应用程序中加载多个 Cordova 微应用程序的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight/Cordova 未在 Android 上 Worklight 的嵌入式 WebView 中加载

内容安全策略框架祖先。 iframe 不会在 iOS10 中加载内容

在页面中加载 gif:未能加载资源 Cordova

为啥我的 AngularJS 视图无法在 Cordova 中加载?

如何在 Cordova 插件中加载数据文件?

Java,在classpath中加载本机库