WebView-将响应站点显示为桌面

时间:2018-11-06 12:43:29

标签: android html mobile webview desktop

乍一看,这也许是一个典型且广为人知的问题。但是我看过的所有其他答案(有很多)一直建议(几乎总是)将WebView的用户代理更改为桌面字符串。一致地,人们回答说这对他们不起作用。包括我自己。

作为一名Web设计新手,从我的研究工作来看,似乎在过去几年中的某个时候,“响应式设计”成为推荐的,使用最广泛的Web设计实现哲学,以决定如何交付/展示网站。

这就是为什么我认为更改WebView的用户代理无效的原因,因为该网站似乎正在根据元标记“视口”确定如何传递内容,例如:

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">

还有其他人克服了吗?我对这个问题的分析是正确的吗?

2 个答案:

答案 0 :(得分:0)

据我了解,我认为这似乎是以下情况

请查看此答案Showing the desktop version of a fully responsive website on tablets

答案 1 :(得分:0)

所以我认为我可能找到了一个解决方案,部分原因是@ hussnain-muavia的回答,尽管我不得不扩展更多内容,我认为这值得其回应。


WebView设置

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中,这导致用户看到调整大小的结果相同。有什么想法吗?