Как определить, завершена ли загрузка iFrame в UIWebView - PullRequest
7 голосов
/ 15 мая 2010

В моем приложении мне нужен способ узнать, когда мой веб-просмотр завершил загрузку. Это очень легко сделать, если содержимое HTML. Тем не менее, мой источник контента - это javascript с iFrame внутри, он вызовет несколько раз метод UIWebView finishLoad Могу ли я проверить, завершена ли загрузка iframe?

Ответы [ 3 ]

7 голосов
/ 19 ноября 2010

Единственный надежный метод, который я нашел, - это прослушать три метода, которые сообщают, что он собирается начать загрузку, и что он завершил загрузку (плюс эквивалент «сбой»), и вручную поддерживать счет для каждого. 1001 *

т.е. что-то вроде:

int outstandingRequests;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    outstandingRequests++;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    outstandingRequests--;

    if( outstandingRequests < 1 )
    viewLoadingPleaseWait.hidden = TRUE;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    outstandingRequests--;
}

Мне также обычно приходилось переопределять метод didFail - Apple неправильно использует это, чтобы сообщить, что, например, проигрыватель YouTube взял на себя обработку видео YouTube. Это НЕ сбой, это «страница была загружена другим приложением».

, например

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    outstandingRequests--;

    if( [error code] == NSURLErrorCancelled )
    {
        NSLog(@"[%@] ...webView CANCELLED loading", [self class] );
    }
    else if( [[error domain] isEqualToString:@"WebKitErrorDomain"]
    && [error code] == 204)
    {
        // no worries ... YouTube, iCal, or etc took over the page load
    }
}
1 голос
/ 02 декабря 2010

(Если это тот же домен), вы можете вызвать функцию (в родительском) из iframe.

top.iFrameLoaded();
0 голосов
/ 29 июня 2013

Чтобы узнать, загружается ли веб-просмотр, вы можете использовать webView.isLoading проверить, все ли рамки веб-просмотра загружены. Нет необходимости подсчитывать количество фреймов. Просто проверьте, истинно ли isLoading внутри webViewDidFinishLoad:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html

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