Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
Cocoa 获取网络视图';s总滚动大小(HTML内容的大小)_Cocoa_Macos_Webkit_Webview - Fatal编程技术网

Cocoa 获取网络视图';s总滚动大小(HTML内容的大小)

Cocoa 获取网络视图';s总滚动大小(HTML内容的大小),cocoa,macos,webkit,webview,Cocoa,Macos,Webkit,Webview,我尝试了很多东西,在这里发布了很多问题,但我仍然无法获得在Cocoa WebKit WebView中保存HTML页面所需的最小大小。 我对DOM进行了一次奇怪的操作,从中可以得到HTML内容大小的近似值,如图所示,我基于此调整了窗口大小,几乎可以正常工作,但我意识到: 如果Webview足够智能,可以显示精确的滚动条(当然是这样),那么为什么没有界面,程序员可以获得该值呢?你知道有什么办法吗 PS:请不要提供javascript解决方案,我需要从应用程序实现这一点。无论如何,作为Webkit的h

我尝试了很多东西,在这里发布了很多问题,但我仍然无法获得在Cocoa WebKit WebView中保存HTML页面所需的最小大小。
我对DOM进行了一次奇怪的操作,从中可以得到HTML内容大小的近似值,如图所示,我基于此调整了窗口大小,几乎可以正常工作,但我意识到:
如果Webview足够智能,可以显示精确的滚动条(当然是这样),那么为什么没有界面,程序员可以获得该值呢?你知道有什么办法吗

PS:请不要提供javascript解决方案,我需要从应用程序实现这一点。无论如何,作为Webkit的html API应该比托管javascript代码更了解其内容,不是吗


您需要使用Javascript获得适当的高度

改编自:

此Javascript将为您提供HTML的高度。您可以将其注入WebView,如下所示:

NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"(function(){var a=document.body,b=document.documentElement;return Math.max(a.scrollHeight,a.offsetHeight,b.clientHeight,b.scrollHeight,b.offsetHeight)})();"];

height
现在将HTML的高度包含为字符串。

虽然Alec Gorge的解决方案对我有效,但当将代码放入
webViewDidFinishLoad
委托方法时,我发现至少在iOS(可能还有OSX的Webkit)中,我可以使用以下代码获得web视图的高度:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    int h = webView.scrollView.contentSize.height;
    self.myWebViewHeightConstraint.constant = h;
}

谢谢,但我已经试过了,不起作用。正文和html不返回任何大小。我可以通过DOM从应用程序访问它,但是body.scrollHeight和其他没有任何值。无论如何,我的应用程序运行用户提供的htmls。我不需要任何javascript代码,我需要从应用程序端对其进行管理。更正,body和html都返回客户端大小,这是我从应用程序设置的窗口大小,而不是html内容的大小。您是否在
-(void)WebViewDiFinishLoad中运行它:(WebView*)WebView;
delegate方法?开始时与Objective-C类似,但UIWebView是iOS。我说的对吗?
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    int h = webView.scrollView.contentSize.height;
    self.myWebViewHeightConstraint.constant = h;
}