Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript获取webView内容的总高度_Javascript_Iphone_Objective C_Uiwebview_Uiscrollview - Fatal编程技术网

使用Javascript获取webView内容的总高度

使用Javascript获取webView内容的总高度,javascript,iphone,objective-c,uiwebview,uiscrollview,Javascript,Iphone,Objective C,Uiwebview,Uiscrollview,我使用UIWebView以HTML字符串的形式显示内容,而不是网站,比iPhone屏幕高,无需在webView中滚动,将其留给父scrollView 为了实现这一点,我需要一种方法来获取总文档大小,包括可滚动区域,以设置webView的高度。我尝试了许多不同的Javascript解决方案: document.height!==未定义?document.height:document.body.offsetHeight//返回UIWebView的高度 document.body.offsetHei

我使用UIWebView以HTML字符串的形式显示内容,而不是网站,比iPhone屏幕高,无需在webView中滚动,将其留给父scrollView

为了实现这一点,我需要一种方法来获取总文档大小,包括可滚动区域,以设置webView的高度。我尝试了许多不同的Javascript解决方案:

document.height!==未定义?document.height:document.body.offsetHeight//返回UIWebView的高度 document.body.offsetHeight//返回零 document.body.clientHeight//返回零 document.documentElement.clientHeight//返回UIWebView的高度 window.innerHeight//返回UIWebView的高度-2 document.body.scrollHeight//返回零 有没有一种解决方案真的有效

当前非工作代码:

[[[self.singlePost.contentText子视图]lastObject]设置可克隆:否]; int content_height=[[self.singlePost.contentText stringByEvaluatingJavaScriptFromString:@document.body.offsetHeight]intValue]; NSLog@Content_height:%d,内容高度; CGRect rect=self.singlePost.contentText.frame; rect.size.height=内容高度; self.singlePost.contentText.frame=rect;
你的代码在哪里? 对我来说,如果在loadHTMLString方法之后调用它,它将返回0。 如果我在voidwebViewDidFinishLoad:UIWebView*WebView委托中调用它,我会得到一个有效值

- (void)loadHTML: (NSString *)html {
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    webView.delegate = self;

    NSURL *resourceURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
    [webView loadHTMLString:html baseURL: resourceURL];
    NSLog(@"height: %d", [[webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue]); // returns 0
  }

- (void)webViewDidFinishLoad:(UIWebView *)theWebView {
    NSLog(@"height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]); //return 2166
}

我使用了一种稍微不同的方法,创建了一个我可以通过键入来获得大小的文档,因为我在检查文档/正文时运气不佳

这是MonoTouch C,但在Objective-C中应该可以正常工作:

private const string DIV_ID = "_uiwebview_";

LoadHtmlString("<body style='background-color:#yourcolor; padding:0px; margin:0px'>" +
  "<div style='width:" + Frame.Width + "px; padding:0px; margin:0px; font-family:" + 
  font.Name + "' id=" + DIV_ID + ">" + html + "</div></body>", base_url);

@Jesse,当用HTML更新时,它会产生比之前显示的更小的大小。

当我尝试使用我的代码时,我发现

(1) NSLog(@"webView height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]);
(2) NSLog(@"webView height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.height"]);
1返回小于原始高度的高度。但是2返回实际高度。我的建议是最大限度地利用两者

- (void)webViewDidFinishLoad:(UIWebView *)theWebView {
    NSLog(@"Body height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]);
    NSLog(@"Doc height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.height"]);
    NSString * javaScript = [NSString stringWithFormat:@"document.getElementById('%@').clientHeight", kDivID];
    NSLog(@"Div height: %@",[webView stringByEvaluatingJavaScriptFromString:javaScript]);
    [self reLayout];
}

- (CGFloat) getWebViewPageHeight {
    CGFloat height1 = [[webView stringByEvaluatingJavaScriptFromString: @"document.height"] floatValue];
    CGFloat height2 = [[webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] floatValue]; 
    return MAX(height1, height2);   
}
输出
无需在iOS 5.0及更高版本中使用Javascript-您可以直接访问其scrollView:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGFloat contentHeight = webView.scrollView.contentSize.height;
    // ....
}

获取网络视图内容的总高度。

document.body.scrollHeight是否有效?好的,如果HTML内容越来越大,这非常有效。但是,如果我尝试再次调用loadHTMLString来更新内容,而新内容恰好更短,document.body.offsetHeight仍然返回相同的值。还有人遇到这个问题吗?这是一个更好的解决方案!非常感谢。这将返回更大的值!而不是实际内容的高度。我身体里只有一条线。但它返回的高度与我在开始时为webview设置的高度相同。这将为我返回0!显然,这只有在情节提要中创建UIWebView时才有效。仅在代码中创建它导致我获得值0。此解决方案不再有效。结果是随机和不可预测的。特别是对于复杂的HTML代码和CSS。改为看@karim的答案。2011年为meCorrect工作得很好。但在2017年,document.body.scrollHeight可以在Javascript中使用。
Body height: 485
Doc height: 509
Div height: 485
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGFloat contentHeight = webView.scrollView.contentSize.height;
    // ....
}