Android——PhoneGap/WebView是否忽略视口元标记?

Android——PhoneGap/WebView是否忽略视口元标记?,android,html,webview,cordova,Android,Html,Webview,Cordova,我有一个网页,我正试图使用PhoneGap(使用普通的WebView设置为“appview”)在Android设备上显示(从项目的资产目录加载),但WebView完全忽略以下内容: <meta name = "viewport" content = "user-scalable=no,width=device-width" /> 无论我在这行中设置了什么(我已经尝试过显式地设置缩放、以像素为单位设置宽度/高度等),设备都会完全忽略它,并将网站呈现得非常小,定位在屏幕的左上角。我

我有一个网页,我正试图使用PhoneGap(使用普通的WebView设置为“appview”)在Android设备上显示(从项目的资产目录加载),但WebView完全忽略以下内容:

<meta name = "viewport" content = "user-scalable=no,width=device-width" />

无论我在这行中设置了什么(我已经尝试过显式地设置缩放、以像素为单位设置宽度/高度等),设备都会完全忽略它,并将网站呈现得非常小,定位在屏幕的左上角。我可以使用收缩手势进行放大(即使我在上面的html代码中明确禁用了缩放),但我希望页面能够放大,以便在加载时与设备正确匹配

这是有趣的一点。。。如果我将完全相同的站点放在web服务器上,并使用测试设备上的默认浏览器导航到该站点,则页面将正确加载(缩放到设备的正确大小)

请帮忙

谢谢

EDIT1:

我当前的设置是:

<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,target-densitydpi=device-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />

这也被完全忽略了

EDIT2:

这里有一些有趣的事情

<meta name="viewport" content="width=device-width, initial-scale=2.0, maximum-scale=2.0, user-scalable=no" />


上面这一行在emulator中将页面缩放到2倍,但在我的设备上没有任何变化(运行2.2.1的三星Epic)。尽管如此,即使是2倍,页面也没有缩放到模拟器的宽度。。。我必须将其设置为类似“初始刻度=2.5”的值。

我在iphone和phonegap上使用它

<meta name="description" content="trevorrudolph.com">
<meta name="format-detection" content="telephone=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta names="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="apple-touch-icon" href="http://trevorrudolph.com/wordpress/apple-touch-icon.png">

尝试在扩展DroidGap的Java类的onCreate()方法中添加以下两行

this.appView.getSettings().setUseWideViewPort(true);
this.appView.getSettings().setLoadWithOverviewMode(true);
请告诉我您的视口标记现在是否开始工作。

我已经尝试过了

this.appView.getSettings().setUseWideViewPort(true);
this.appView.getSettings().setLoadWithOverviewMode(true);
缩放未启用

使用以下设置,将启用缩放

this.appView.getStrings().setSupportZoom(true);
但是它没有被viewport标记正确控制,即使在viewport标记中设置了minimum scale=1和maximum scale=1,所有页面现在都可以缩放


现在页面导航出现错误,单击页面上的按钮,android后退按钮无法正常工作。

如果您希望android将内容缩放到固定宽度(示例中为1024),请使用以下方法:

<meta name="viewport" id="viewport" content="width=1024">
<script type="text/javascript">
    var viewPortWidth = 1024;
    function setViewport() {
    if ((navigator.userAgent.toLowerCase().indexOf("android")!=-1)) {
        var wW0 = window.screen.width;
        var scale = wW0/viewPortWidth;
        var vPort = "width="+viewPortWidth+", maximum-scale="+scale+", minimum-scale="+scale+", initial-scale="+scale+", user-scalable=yes";
        document.getElementById("viewport").setAttribute("content", vPort);
    }
    }
    setViewport();
</script>

var viewPortWidth=1024;
函数setViewport(){
if((navigator.userAgent.toLowerCase().indexOf(“android”)!=-1)){
var wW0=window.screen.width;
变量比例=wW0/视口宽度;
var vPort=“width=“+viewPortWidth+”,最大比例=“+scale+”,最小比例=“+scale+”,初始比例=“+scale+”,用户可缩放=是”;
document.getElementById(“视口”).setAttribute(“内容”,vPort);
}
}
setViewport();

另外,您应该为onorientationchange添加事件侦听器以调用setViewport函数。

这里有很好的答案,但Cordova API似乎有点变化

OnCreate
方法中(在
loadUrl
之后或在显式调用
init
之后):


添加初始比例=1会改变什么吗?嗨。我当前的设置是:。。。这没用。它完全被忽略了。谢谢你可能想看看我在这里的so帖子:,它也指出了我提交的一个缺陷。它们很可能不是被忽略了,而是这些值相互冲突并被删除了。我有很多关于各种参数排列的结果。你可能会发现一些有用的东西我相信这是安卓特有的问题,而不是iPhone。我很久以前就写过这篇文章,当时我还不知道我对它抱有希望,但它不起作用。我的页面是760px,屏幕是1080px,它符合~0.465的比例。760/1080约为0.704。我认为这里的诀窍在于,不仅要给出
宽度
属性,该属性应该有效,但显然不起作用,还要给出最小比例和最大比例属性,它们可能会起作用。这就是它(以及伊凡的答案)——这需要更多的投票。不过,对我来说,需要更新的是
公共类MyApp扩展了CordovaActivity
方法,而不是
DroidGap
。也许你可以更新你的答案,因为它仍然是相关的!对不起,伙计们,我是新手。我必须在哪里添加此代码,我必须做什么才能获得视口工作?我有一个cordova 3.6项目,我的视口不工作。所以我找到了这个解决方案,听起来不错,但是。。。是的,我不知道在哪里实现代码:-/回答很好,但API有点变化。现在是:((SystemWebView)appView.getEngine().getView()).getSettings().xxxmistake:
this.appView.getSettings().setSupportZoom(true)
    CordovaWebViewEngine engine = appView.getEngine();
    SystemWebView webView = (SystemWebView)engine.getView();
    WebSettings settings = webView.getSettings();
    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true);