首先让我描述我的场景:我有一个phonegap应用程序,它只是一个简单的视图,输入文本来配置远程服务器地址和启动程序btn,点击btn ,它启动配置的托管应用程序并显示到本机webview中。可能从iOS phonegap插件启动index.html
但是,如果用户想重新配置远程应用程序地址,我需要能够返回到基于本地的配置视图,因此我在托管应用程序中添加了一个btn。由于webviews(包括android和ios)对本地资源的访问限制,我无法简单地通过JavaScript重新加载file:///blarblar/index.html。
为了制定出这一点,我已经试图通过本地插件来完成实际重装Android中象下面这样:
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
final CallbackContext ctxt = callbackContext;
if (action.equals(ACTION_RELOAD)) {
final Mobility act = (Mobility)cordova.getActivity();
act.runOnUiThread(new Runnable() {
@Override
public void run() {
act.reloadMainView(); //--> this is calling super.loadUrl(Config.getStartUrl()); in MainActivity class
ctxt.success("reloaded");
}
});
return true;
}
callbackContext.error("Invalid action" + action + args);
return false;
}
在android系统这样做做工精细。然后,我尝试在Web搜索大量资源来制定出一个相同的版本到iOS,不幸的是我在iOS原生的发展非常有限,出来下面的代码
#import "UiWrapper.h"
#import "../Classes/AppDelegate.h"
#import <Cordova/CDV.h>
@implementation UiWrapper
- (void) reload:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
CDVViewController* topview = appDelegate.viewController;
NSLog(@"test");
[topview.webView stringByEvaluatingJavaScriptFromString:@"location='file:///var/mobile/Applications/A70D02B2-ED48-4918-9CF5-DA3953111636/SM%20Mobile%20Client.app/www/index.html'"];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"reloaded"];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end
它实际上是不行的,我认为原因是代码回调JavaScript实际重新加载,这将不会解决访问本地资源的限制。我需要的是直接在插件中加载index.html。我无法弄清楚如何在iOS中执行此操作
所以我的问题是:是否可以从iOS插件加载index.html以及如何执行此操作?
还好找到一个方法来重新加载index.html的纯Objective-C的 –