【问题标题】:iPhone: Avoid JavaScript RedirectiPhone:避免 JavaScript 重定向
【发布时间】:2012-01-30 19:35:22
【问题描述】:

在这里使用第二个解决方案:Call Objective C method from JavaScript with parameter,我在我的一些 JavaScript 代码中添加了以下行,以便将一些信息传递回 Objective-C:

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

问题是,当我这样做时,页面上的其余 JavaScript(在 location.href=... 行之后)没有执行,并且浏览器被重定向到空白页面。有没有办法在不让浏览器进入空白页面的情况下执行该行?

感谢任何帮助,如果我能澄清一下,请告诉我。谢谢。

编辑: 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 ];
    }

}

【问题讨论】:

    标签: javascript iphone objective-c ios xcode


    【解决方案1】:

    设置 location 对象的 href 值将始终立即导致 JavaScript 重定向。也就是说,实际上,主要目的是让对象可写。

    如果您希望在不进行重定向或刷新的情况下更新 URL 片段,请尝试使用 location.hash 属性。

    【讨论】:

    • 感谢您的回复。不幸的是,当我尝试这个时,'myApp://index=10'; 似乎甚至没有在 AppDelegate.m 中得到处理。
    【解决方案2】:

    尝试 1:您是否尝试设置 window.location 而不是 location.href?

    尝试 2:您是否返回 NO 以取消对 Objective-C 方法的请求?

    【讨论】:

    • 感谢您的回复,但不幸的是问题仍然存在。
    • 我相信我确实返回了 NO,但我已将我的代码添加到我的初始帖子中,以防我做错了?谢谢。
    • 一开始不要那么复杂。只需检查该方案是否与您的方案匹配:如果是,则返回 NO 并记录一些内容;如果不是,返回YES。
    • 嗯,它确实正确地获取了数据,所以我知道它正在从重定向中获取信息,但是即使我返回 NO,它似乎仍然会重定向。
    • 由于某种原因,即使我返回 no,它似乎仍在重定向?
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多