可以从iOS phonegap插件启动index.html

时间:2014-06-23 07:41:04

标签: ios cordova plugins

首先让我来描述我的场景:我有一个phonegap应用程序,它只是一个简单的视图,带有输入文本来配置远程服务器地址和一个启动器btn,通过点击btn,它启动配置的托管应用程序并显示到原生webview。

但是,如果用户想要重新配置远程应用程序地址,我需要能够返回基于本地的配置视图,因此我在托管应用程序中添加了一个btn。我不能简单地通过JavaScript重新加载file:///blarblar/index.html,因为webviews&#(以及android和ios)对本地资源的访问限制。

为了解决这个问题,我试图通过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中运行良好。然后我尝试将相同的版本设计到iOS,不幸的是我在iOS原生开发中非常有限,通过在Web上搜索大量资源,出现以下代码

#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以及任何线索如何做到这一点?

1 个答案:

答案 0 :(得分:1)

好的,终于找到了如何将UIWebView重置为objective-c

中的本地index.html
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];