2014-06-23 133 views
0

首先让我描述我的场景:我有一个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以及如何执行此操作?

+0

还好找到一个方法来重新加载index.html的纯Objective-C的 –

回答

1

好了,终于找到了如何将一个UIWebView重置为当地的index.html在Objective-C

AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate]; 
CDVViewController* topview = appDelegate.viewController; 

NSString* path = [[NSBundle mainBundle] pathForResource:@"www/index" ofType:@"html"]; 
NSURL* url = [NSURL fileURLWithPath:path]; 
NSURLRequest* request = [NSURLRequest requestWithURL: url]; 

[topview.webView loadRequest:request]; 
+0

请问您有插件, @RogerJin? – Alex

+0

是的,你可以试试https://github.com/jinyangzhen/uiwrapper。这是在半年前完成的。我不是很确定它可以与最新的科尔多瓦版本一起工作。但它应该很容易做到。 :-) –

+0

谢谢@RogerJib。你的插件不能为我编译。原因是它试图找到移动性。 '''最后的Mobility act =(Mobility)cordova.getActivity();'''我该如何解决?谢谢! – Alex