2013-08-22 2 views
0

Я пользуюсь телефоном. В настоящее время на 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 и iOs, и я не могу найти правильные ключевые слова или начало ответа. I'am состояние, чтобы иметь эквивалент функции execute, но тогда я понятия не имею, как получить mainActivity и перезагрузите страницу

До сих пор I'n моего плагина у меня есть следующий код, но он не работает:/

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

EDIT:

Я пытаюсь сделать следующее:

@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 функции ничего не отображается

ответ

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"]); 
+0

Спасибо за обмен. – Ross

1

Вы можете сделать это несколько различных способов (что я знаю). Убедитесь, что у вас есть функция changeUrl в пространстве имен Windows для обоих подходов.

первый подход (это может быть вызвано из любого места, не должен быть класс 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]; 
Смежные вопросы