iPhone: избегайте перенаправления JavaScript - PullRequest
0 голосов
/ 30 января 2012

Используя 2-е решение здесь: Вызов метода Objective C из JavaScript с параметром , я добавил следующую строку в некоторый мой код JavaScript, чтобы передать некоторую информацию обратно в Objective-C:

location.href = 'myApp://index=10';

Проблема в том, что когда я делаю это, остальная часть JavaScript на странице (после строки location.href = ...) не выполняется, и браузер перенаправляется на пустую страницу. Есть ли способ выполнить эту строку, не заставляя браузер перейти на пустую страницу для этого?

Я ценю любую помощь, пожалуйста, дайте мне знать, если я могу уточнить. Спасибо.

EDIT: Код Objective-C:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL] ;
    NSString *url2 = [[request URL] absoluteString];


    static NSString *urlPrefix = @"myApp://";
    if ([url2 hasPrefix:urlPrefix]) {
        NSString *paramsString = [url2 substringFromIndex:[urlPrefix length]];
        NSArray *paramsArray = [paramsString componentsSeparatedByString:@"&"];
        int paramsAmount = [paramsArray count];

        for (int i = 0; i < paramsAmount; i++) {
            NSArray *keyValuePair = [[paramsArray objectAtIndex:i] componentsSeparatedByString:@"="];
            NSString *key = [keyValuePair objectAtIndex:0];
            NSString *value = nil;
            if ([keyValuePair count] > 1) {
                value = [keyValuePair objectAtIndex:1];
            }

            if (key && [key length] > 0) {
                if (value && [value length] > 0) {
                    if ([key isEqualToString:@"index"]) {
                        NSLog(@"Works");
                        exit;
                    }
                }
            }
        }
        return NO;
    }


    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) {
            return YES; 
    }

    else {
       return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }

}

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Установка значения href для объекта location всегда немедленно приведет к перенаправлению JavaScript. Это, собственно, главная цель - позволить объекту быть доступным для записи.

Если вы хотите обновить фрагмент URL без перенаправления или обновления, попробуйте использовать атрибут location.hash.

0 голосов
/ 30 января 2012

Попытка 1: вы пытались установить window.location вместо location.href?

Попытка 2: вы вернули NO для отмены запроса по методу Objective-C?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...