我正在使用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);
但我是目标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
函数中发出警报则没有显示
答案 0 :(得分: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"]);
答案 1 :(得分:1)
你可以通过几种不同的方式(我所知道的)这样做。确保两种方法的窗口命名空间中都有changeUrl
函数。
第一种方法(这可以从任何地方触发,不必是一个cordova插件类) -
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];