iOS UIWebView на DOM Ready - PullRequest
       3

iOS UIWebView на DOM Ready

2 голосов
/ 04 февраля 2012

Моя проблема заключается в том, что UIWebView запускает webViewDidFinishLoad до его отображения, поэтому после отображения представления у меня появляется небольшая задержка перед отображением содержимого представления.Можно ли вызвать событие, когда DOM полностью отображается?

Ответы [ 2 ]

7 голосов
/ 04 февраля 2012

Да, используйте JavaScript для этого. На вашей HTML-странице добавьте обработчик JavaScript window.onload, а затем при его запуске вы можете сделать одно из двух:

  1. вызвать приложение, загрузив поддельный URL-адрес и перехватив его с делегатом веб-просмотра. Э.Г.

    //in your web page, in javascript
    
    window.onload = function() { document.location.href = 'http://madeupdomain.com/loaded'};
    
    //webview delegate in cocoa
    
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        NSURL *URL = [request URL];
        NSString *host = URL.host;
        if ([host isEqualToString:@"madeupdomain.com"])
        {
            //the webview has finished loading, so show it
            webview.hidden = NO;
    
            return NO;
        }
        return YES;
    }
    
  2. установить флаг переменной в вашем коде javascript, а затем приложение опрашивает веб-просмотр с помощью таймера, вызывающего stringByEvaluatingJavascriptFromString в веб-представлении, чтобы увидеть, установлен ли этот флаг еще.

    //in your web page, in javascript
    
    window.pageHasLoaded = false;
    window.onload = function() { window.pageHasLoaded = true; };
    
    //in a timer in your native app code
    
    if ([[webview stringByEvaluatingJavascriptFromString:@"window.pageHasLoaded"] isEqualToString:@"true"])
    {
         webview.hidden = NO;
    }
    
1 голос
/ 10 марта 2015

попробуйте

@interface LoadNewsPageController : UIViewController <UIWebViewDelegate>
@property(nonatomic, weak) IBOutlet UIWebView *webView;
@end



@implementation LoadNewsPageController {

}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.webView.delegate = self;

    NSLog(@"%@", self.newsObject.url);
    NSURL *websiteUrl = [NSURL URLWithString:@"http://google.com"];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:websiteUrl];
    [self.webView loadRequest:urlRequest];
}


- (void)webViewDidFinishLoad:(UIWebView *)webView {
    if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
        // UIWebView object has fully loaded.
        NSLog(@"Dom ready");

    }
}


@end
...