乍一看,这也许是一个典型且广为人知的问题。但是我看过的所有其他答案(有很多)一直建议(几乎总是)将WebView的用户代理更改为桌面字符串。一致地,人们回答说这对他们不起作用。包括我自己。
作为一名Web设计新手,从我的研究工作来看,似乎在过去几年中的某个时候,“响应式设计”成为推荐的,使用最广泛的Web设计实现哲学,以决定如何交付/展示网站。
这就是为什么我认为更改WebView的用户代理无效的原因,因为该网站似乎正在根据元标记“视口”确定如何传递内容,例如:
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
还有其他人克服了吗?我对这个问题的分析是正确的吗?
答案 0 :(得分:0)
据我了解,我认为这似乎是以下情况
请查看此答案Showing the desktop version of a fully responsive website on tablets
答案 1 :(得分:0)
所以我认为我可能找到了一个解决方案,部分原因是@ hussnain-muavia的回答,尽管我不得不扩展更多内容,我认为这值得其回应。
WebView将需要能够执行JavaScript:
WebSettings settings = _webView.getSettings();
settings.setJavaScriptEnabled(true);
为了使网站完全缩小(即显示整个网站且没有滚动条),必须将其他设置应用于WebView:
settings.setUseWideViewPort(true);
settings.setInitialScale(1);
settings.setLoadWithOverviewMode(true);
最终导致桌面视图的是以下JavaScript:
function desktopMode() {
var viewPort = document.getElementsByName("viewport");
if (viewPort != null) {
viewPort = viewPort[0];
}
else if ((viewPort = document.getElementById("viewport")) == null) {
return;
}
viewPort.setAttribute("content", "width=" + (screen.width + 1) + "; initial-scale=0.5");
}
正如我在问题中提到的,我是一名网页设计新手。尽管我注意到一件事是不一致(抱歉,Web开发人员?),所以我有意构建了一个名为和 ID的检查。我们应该只期望一个标签,因此,为什么name假定为第零个元素。
在此解决方案之外,我发现我正在获得桌面布局,但还不够完整。因此,我对计算进行了修改:
getViewport.setAttribute("content", "width=" + (screen.width * 4) + "; initial-scale=0.5");
我不喜欢它。但这有效。我怀疑可能对此有一些更好的计算或常数。
也许值得一提,如果站点不使用响应式设计,更改用户代理字符串仍然值得。但这是一个无关的话题。
此解决方案的主要缺点是,它将导致一些丑陋的UI,用户可以在其中看到网站的大小调整。当我将JS放在onPageStarted中时,功能当然会被覆盖。因此,我将其放在超级onPageStarted调用之后或onPageFinished中,这导致用户看到调整大小的结果相同。有什么想法吗?