Как да проверите дали URL адресът на UIWebview е зареден или не?

Имам статична уеб страница с около 10 връзки (елемента). Моята нужда е проста: когато потребител щракне върху връзка, отваряне в нов уеб изглед. Когато потребителят се върне в менюто, щракнете отново върху тази връзка, заредете отворения уеб изглед преди (няма нужда да добавяте нов уеб изглед със същия URL адрес). Ето моето решение: запазете заредения URL адрес и проверете това при предварително зареждане на ново кликване.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if(navigationType == UIWebViewNavigationTypeLinkClicked) {
        if(![self checkIsAlreadyLoaded:request]) {
            // load new webview
            [self addWebView:request];
            return NO;
        }
    }
    return YES;
}

- (BOOL)checkIsAlreadyLoaded:(NSURLRequest *)request {
    NSString *urlToCheck = request.URL.absoluteString;
    NSLog(@"URL to check: %@", urlToCheck);
    for (int i = 0; i < self.visitedURLsArray.count; i++) {
        if([[self.visitedURLsArray objectAtIndex:i] isEqualToString:request.URL.absoluteString]) {
            NSLog(@"URL Found!");
            return YES;
        }
    }

    NSLog(@"*** NOT MATCHING ***");
    return NO;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    if(![self.visitedURLsArray containsObject:webView.request.URL.absoluteString]) {
        NSLog(@"saved url: %@", webView.request.URL.absoluteString);
        [self.visitedURLsArray addObject:webView.request.URL.absoluteString];
    }
}

Някои от моите връзки са Google връзки и имам проблеми с тези връзки. Пример: Google+ URL:

Тъй като запазеният URL адрес винаги е различен от началния URL адрес, не мога да отворя запазения URL адрес, как мога да се справя с това?


person HoangNA    schedule 08.12.2015    source източник
comment
Можете да направите справка тук. Трябва да потърсите, преди да зададете въпрос   -  person dieuvn3b    schedule 08.12.2015
comment
@bluesky: този въпрос не ми помага да намеря отворения URL. Когато отворя връзка в webview, крайната връзка (тази, която мога да запазя в масив) не е същата като започнатата връзка, така че сравнението на запазената връзка с последната кликната връзка винаги връща FALSE.   -  person HoangNA    schedule 08.12.2015
comment
Можете да съхранявате и сравнявате заявките, вместо просто да сравнявате URL адресите.   -  person Yedy    schedule 08.12.2015


Отговори (1)


запазете URL адреса преди пренасочването // имайте това във вашия @интерфейс

@property NSURL *urlBeingLoaded;

....

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if(navigationType == UIWebViewNavigationTypeLinkClicked) {
        if(![self checkIsAlreadyLoaded:request]) {
            // load new webview
            self.urlBeingLoaded = request.URL;
            [self addWebView:request];
            return NO;
        }
    }
    return YES;
}

- (BOOL)checkIsAlreadyLoaded:(NSURLRequest *)request {
    NSString *urlToCheck = request.URL.absoluteString;
    NSLog(@"URL to check: %@", urlToCheck);
    for (int i = 0; i < self.visitedURLsArray.count; i++) {
        if([[self.visitedURLsArray objectAtIndex:i] isEqualToString:request.URL.absoluteString]) {
            NSLog(@"URL Found!");
            return YES;
        }
    }

    NSLog(@"*** NOT MATCHING ***");
    return NO;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    if(![self.visitedURLsArray containsObject:_urlBeingLoaded]) {
        NSLog(@"saved url: %@", _urlBeingLoaded);
        [self.visitedURLsArray addObject:self.urlBeingLoaded];
    }
}
person Daij-Djan    schedule 08.12.2015