0

我正在使用phonegap。目前在 android 上,我可以使用我所做的非常简单的功能来更改页面:

public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
        MainActivity ma = (MainActivity) cordova.getActivity();
        ma.reload(args.getString(0));
        return (true);
    }

在mainActivity中:

super.loadUrl("file:///android_asset/www/" + url, 1000);

但是我是 Objective C 和 iO 的新手,我无法找到正确的关键字或答案的开头。我能够拥有该execute功能的等价物,但是我不知道如何获取 mainActivity 并重新加载页面

到目前为止,我是我的插件,我有以下代码,但它不起作用:/

- (void)execute:(CDVInvokedUrlCommand*)command
{
//id message = [command.arguments objectAtIndex:0];
 id message = @"buy/buy.html";       
 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:message]]];
}

编辑:

我尝试执行以下操作:

@implementation Redirect

- (void)execute:(CDVInvokedUrlCommand*)command
{
    id message = [command.arguments objectAtIndex:0];

    NSString* newUrl = message;
    NSString* javaScript = nil;
    NSString *jsCallBack = [[NSString alloc] initWithFormat:@"changeUrl('%@');", newUrl];



    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
    javaScript = [pluginResult toSuccessCallbackString:jsCallBack];
    [self writeJavascript:javaScript];
}
@end

在html中:

 window.changeUrl = function (url){
        alert("ici");
        navigator.app.loadUrl(url);
    }

var Redirect= function(){
    return cordova.exec( function(data){ alert(data);console.log("Success");}, function(){ console.log("Fail");},
                            "Redirect",
                            "execute",
                            [location.href]);
};

我确定插件何时被调用,但如果我在changeUrl函数中添加警报,则不会显示任何内容

4

2 回答 2

2

我在插件中找到了一个解决方案:

- (void)execute:(CDVInvokedUrlCommand*)command
{
    id message = [command.arguments objectAtIndex:0];
    AppDelegate* mainDelegate =[[UIApplication sharedApplication]delegate];
    [mainDelegate reloadUrl:message];
}

在 AppDelegate.m

- (void)reloadUrl:(NSString *)url
{
 #if __has_feature(objc_arc)
    self.viewController = [[MainViewController alloc] init];
#else
    self.viewController = [[[MainViewController alloc] init] autorelease];
#endif  

    self.viewController.startPage = url;
    self.window.rootViewController = self.viewController;
    [self.window reloadInputViews];
}

我只是在js中调用插件:

return cordova.exec( function(data){ alert(data);console.log("Success");}, function(){ console.log("Fail");},
                                    "Redirect",
                                    "execute",
                                    ["index2.hmtl"]);
于 2013-08-23T13:41:53.013 回答
1

您可以通过几种不同的方式来做到这一点(据我所知)。确保您changeUrl在两种方法的窗口命名空间中都有该函数。

第一种方法(这可以从任何地方触发,不必是科尔多瓦插件类) -

function changeUrl(url){
    navigator.app.loadUrl(url);
}

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString* newUrl = @"file:///android_asset/www/buy/buy.html";
NSString *jsCallBack = [[NSString alloc] initWithFormat:@"changeUrl('%@');", newUrl];
[appDelegate.viewController.webView stringByEvaluatingJavaScriptFromString:jsCallBack];

第二种方法(这必须从cordova插件类触发,这是您当前的代码所在)-

function changeUrl(url){
    navigator.app.loadUrl(url);
}

NSString* newUrl = @"file:///android_asset/www/buy/buy.html";
NSString* javaScript = nil;
NSString *jsCallBack = [[NSString alloc] initWithFormat:@"changeUrl('%@');", newUrl];
javaScript = [pluginResult toSuccessCallbackString:jsCallBack];
[self writeJavascript:javaScript];
于 2013-08-22T21:03:03.763 回答