缩小WebView的初始缩放比例

3
我想将我的WebView的初始缩放比例缩小,如下所示的viewport配置:
<meta name="viewport" content="width=device-width, initial-scale=0.93, maximum-scale=0.93, user-scalable=no" />

但是这个视口被 WebView 忽略并渲染为全尺寸,这里是我的 WebView 设置,但没有成功:

    mWebView.getSettings().setLoadWithOverviewMode(true);
    mWebView.getSettings().setUseWideViewPort(true);
    mWebView.setInitialScale(93);

有什么方法可以实现这个目标吗?

您正在使用 user-scalable=no",这会取消缩放。请尝试不使用它。 - tukan
@tukan 我无法更改这个,因为我无法访问源网页,但是在iOS Safari上使用“initial-scale=0.93”参数可以正常工作! - iSun
它可能有效,因为它忽略了user-scalable。如果你没有源代码,那我就没什么主意了。 - tukan
我会尝试使用 zoomBy(93) 或者 setLayoutParams(new ViewGroup.LayoutParams((int)(width/100F*93),(int)(height/100F*93)) - Darkman
2个回答

1
当您使用user-scalable=no时,禁用了缩放功能。如果您无法访问网页源代码进行更改,则唯一可能的解决方案是在页面完成加载时使用Javascript更改Viewport Content属性。为允许此操作,您必须设置setJavaScriptEnabled(true);。
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient(){
 @Override
 public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    //Option 1: change the viewport content after the page is finished loaded and set initial-scale=0.93 and user-scalable=yes
    view.loadUrl("javascript:document.getElementsByName('viewport')[0].setAttribute('content', 'width=device-width, initial-scale=0.93, maximum-scale=0.93, user-scalable=yes');");

    //Option 2: change the body zoom style to the initial value you want eg: 0.93 (93%)
    //view.loadUrl("javascript:document.body.style.zoom = "+String.valueOf(0.93)+";");
  }
 });
//load the url
webView.loadUrl(url);

1
作为替代方案,我们可以在这里尝试使用CSS。
添加类来缩小并在完成或不再需要缩小时删除该类。

.scale-down {
      transform: scale(0.93);
}
<html>
<body class="scale-down" >

    <h2>I am scaled down to 93/100</h2>

</body>
</html>

您可以按照此处指定的方式注入CSS。

<body style="transform: scale(0.93);">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接