English 中文(简体)
UIWebView - 如何确定“最后”网上电文?
原标题:
  • 时间:2009-05-25 23:27:18
  •  标签:

网页 任何物体似乎都装上了该网页。 是否有办法确定全部装满内容?

最佳回答

有趣的是,我不认为它会这样做。 虽然我确信还有其他办法这样做(如果能够从网上电文中提取URL,以便你能够看到哪一是完成装货的主要网页?),但我认为,主要的东西是利用估算进度来检查页上的进展,并用你想要做的任何东西打上我所想的100%完成装货时。 谷歌“电话网概数”并点击了我撰写的指南中的第一个链接,说明如何做到这一点。

最新情况:

请使用下文中光彩的回答,而不是地雷。 在贵方言中使用私人标语是一种坏的思想,你可能会被拒绝,他的解决方案是正确的。

问题回答

I m guessing that iframes causes the webViewDidStartLoad /webViewDidFinish Load pair.

查询,作为回答的对我来说是没有工作的;该查询已退回false。 甚至在两条<代码>第一号之后,即打电话。 相反,我把装货跟踪如下:

- (void)webViewDidStartLoad:(UIWebView *)webView {
  webViewLoads_++;
}


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

  if (webViewLoads_ > 0) {
    return;
  }

  …
}

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

(注,只有开端/结对的奶制品没有连续出现时,才会奏效,但从我迄今的经验来看,这种情况已经发生。)

检查这一情况肯定会为你工作:

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

监测负荷进展并控制较少的另一个办法是观察网上电文ProgressEstimateChanged Notetification、WebViewProgressFinished Notetification和WebViewProgressStartedNoification通知。 例如,你可以观察这些通知,以便在你的申请中执行简单的进展指标。 You通过援引估计数更新进展指标 获取目前装货量估计数的进展方法。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html” rel=“nofollow” http://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html

你还可以使用第1类短短文,写到,在IDWebView中添加了部分内容,也允许你选择在缺电网之间。 观点行为(在每一物体装载后得到通知),或“预期”行为(只在网页满负荷时才得到通知)。

https://github.com/freak4pc/UIWebView-Blocks”rel=“nofollow”>https://github.com/freak4pc/UIWebView-Blocks

我需要从尚未完全加载的页面中捕获一个变量。

这为我工作:

- (void) webViewDidFinishLoad:(UIWebView *)webView {
    NSString *valueID = [webView stringByEvaluatingJavaScriptFromString:@"document.valueID;"];

    if([valueID isEqualToString:@""]){
        [webView reload];
        return;
    }

    //page loaded
}

所有这些选择都没有真正为我的使用案例发挥作用。 我使用的是磷酸kins。 我发现,如果把超文本装入网上调查,就会有单独的形象,而这种形象是连续发生的,因此我们必须对此负责,我确实有时间。 这不是最佳解决办法,而是似乎行之有效:

- (void)webViewActuallyFinished {
     _webViewLoads--;

    if (_webViewLoads > 0) {
        return;
    }

    //Actually done loading

}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    _webViewLoads++;
}


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


    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(webViewActuallyFinished) userInfo:nil repeats:NO];
}

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

它可能已经远远落后了,但希望能够提供帮助。

i 在进入网络电荷法时仅使用通知,这样一来就可以掌握一种方法,然后可以发现通知,并且从那里去做我的逻辑。

希望这一帮助。 它没有抓住最近一个称为网络电话法的事例,而是允许你在被召唤后做一些事情,而不是重复使用这一特定方法(例如,显示一个纽州)。

<><><>><>>>><>>>>><>>>>>><>>>><>>>>>>><>><>>><>>>><>>><>><>>><>>>>>><>>>>><>>>>>><>>>>>><>>>>>><>>>>>>><>>>>>><>>>>>>>>><>>>>>>><>>>>>>>><>>>>>>>>>>>><>>>>>>>>>>>>>>>>>>><>>>>>>>>>>>>>>>>>><>>>>>>>>>>>>>>>>>>>>>>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

i 进行了测试,并得以测试。 通知所要求的方法在全页上装满后将打电话。

或者,我认为你可以在授权方法上对“DidStartLoad”和网上“DidFinishLoad”进行反响,以确保他们在你管理自己的法典之前也这样做。 然而,这只是一个粗略的黑板,因为我们永远不会知道,除非像我一样,你装上了一条html的垫子,并且能够添加一个 Java的文字,以检查你装上的网页上有多少内容。 i 只是分享一些试图解决这一问题的方法。 希望它能够提供帮助。

鼓励反馈意见。 感谢!

这里,我用什么来显示在“Vinod s”答案之上的“DOM”装载物时的先质。

注:webViewDidStartLoad之间 www.un.org/Depts/DGACM/index_french.htm

ready State 可能的数值为loading,interactivecompleted。 (和nil?)

- (void)webViewDidStartLoad:(UIWebView *)webView {
    [self spinnerOn];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self startDOMCompletionPolling];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    [self startDOMCompletionPolling];
}


- (void)startDOMCompletionPolling {
    if (self.domCompletionListener) {
        [self.domCompletionListener invalidate];
    }
    self.domCompletionListener = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkDOMCompletion) userInfo:nil repeats:YES];
}

- (void)checkDOMCompletion {
    NSString *readyState = [self.webView stringByEvaluatingJavaScriptFromString:@"document.readyState"];

    if (readyState != nil) {
        if (readyState.length > 0) {
            if ([readyState isEqualToString:@"loading"]) { //keep polling
                return;
            }
        }
    }
    // completed ,  interactive , nil, others -> hide spinner
    [self.domCompletionListener invalidate];
    [self spinnerOff];
}




相关问题