Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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
Phonegap Android应用程序中的视口设置被忽略,但仅在某些手机上?_Android_Cordova_Viewport_Cordova 3 - Fatal编程技术网

Phonegap Android应用程序中的视口设置被忽略,但仅在某些手机上?

Phonegap Android应用程序中的视口设置被忽略,但仅在某些手机上?,android,cordova,viewport,cordova-3,Android,Cordova,Viewport,Cordova 3,一个用户报告说他的手机上的Viewport meta标记被忽略了,但它在我测试过的任何地方都能工作。为什么viewport在一台Android设备上工作,而在另一台具有相同操作系统版本的设备上失败 这是在Phonegap 3.5 Android应用程序上,该应用程序将所有内容布局到设定大小(1800x1200),然后使用viewport将其缩放到设备的大小,如下所示: var scale = windowHeight/appHeight; var vport = "width=device-wi

一个用户报告说他的手机上的Viewport meta标记被忽略了,但它在我测试过的任何地方都能工作。为什么viewport在一台Android设备上工作,而在另一台具有相同操作系统版本的设备上失败

这是在Phonegap 3.5 Android应用程序上,该应用程序将所有内容布局到设定大小(1800x1200),然后使用viewport将其缩放到设备的大小,如下所示:

var scale = windowHeight/appHeight;
var vport = "width=device-width, user-scalable=0, initial-scale="+scale+", 
    minimum-scale="+scale+", maximum-scale="+scale;
document.getElementById("viewport").setAttribute("content", vport);
我试过的地方都很好用。适用于最新的Firefox和Chrome,在编译为Android并在Nexus 5、Nexus 10或Galaxy 3上运行时,以及在SDK 19、20或21的emulator上运行时也适用。我唯一看到它失败的地方是SDK 17(Android 4.2.2)或更低版本,但这不应该是问题,因为我将Android minSdkVersion设置为19(Android 4.4.2)

我的问题是,一个用户报告说他的Sony Xperia Z上的视口设置被忽略(文本很大)。所以我的问题是,在使用相同操作系统的手机上,视口支持如何可能有所不同?例如,两部4.4.2手机是否可能有不同的WebKit


编辑-是否有可能忽略android版本?我还不能确认用户的SDK版本,但是当我尝试将生产apk安装到4.2.2模拟器时,它允许我。我以为是“不受支持的sdk”错误或其他什么

您确认用户使用的是手机内置浏览器,还是Chrome或Firefox Mobile?很可能webkit可以在手机之间进行调整。例如,我的Droid Turbo的默认浏览器是Chrome,但我的三星Galaxy S3的系统浏览器是基于webkit的,我用Chrome替换了它

更有可能的是,您遇到的问题是元标记不支持ID。您没有包括特定的源,但标准元标记标记是:

如果您的代码如下所示:

然后尝试使用document.getElementById()访问它会给您一些零散的结果,如果它能工作的话

您需要做的是以其他方式搜索meta标记,如:

var vp = document.querySelector('[name="viewport"]');
然后,您可以使用vp作为对象,按照您已经期望的方式进行操作


如需有关querySelector的详细信息:

如评论中所述,问题在于用户使用的是4.2.2(其中viewport被认为是不可靠的),因为phonegap设置的Minsdk版本低于我在config.xml中指定的版本。我正试图弄明白为什么会是[这里][1]

无论如何,如果您是因为视口问题而来到这里,那么我的研究和与Jason M.Batchelor的评论中的讨论得出的有用的东西是:

  • 确保meta真的被更新了(见Jason的答案)
  • 确保minsdk为19+,旧操作系统上的视口行为似乎有问题
  • 经过多次测试后,对我最有效的视口设置是:

    变量比例=窗口高度/应用高度; var vport=“width=设备宽度,用户可扩展=是,初始缩放=“+scale+”, 最小刻度=“+scale+”,最大刻度=“+scale+”,目标密度dpi=设备dpi; document.getElementById(“视口”).setAttribute(“内容”,vport)


然而,它似乎取决于您使用的一些CSS,是否有比视口更宽的div,以及可能的其他内容,因此我建议在您支持的每个sdk上进行测试。

这是一个android应用程序,而不是网页。它使用与操作系统捆绑在一起的webkit,用户的浏览器应该(我相信)无关紧要。是的,当然我可以使用getElementById访问视口,否则它无法在我测试的所有设备上工作。你问过设备之间是否有差异,我的观点是webkit的实现在不同的设备上是不同的。我想说,你在一小部分设备上很幸运,而querySelector(回到2.1版时,所有Android设备都支持它)将是一种更安全的方法。你尝试过的其他方法都没有帮助,那么尝试这个有什么问题吗?哦,嘿!你看到这个问题了吗?我似乎还记得minsdkversion是编译器的一种“指南”,但我想说,对于不同的线程来说,这是一个值得考虑的问题。很高兴你取得了一些有益的进展!您应该用答案更新您的问题,并将其标记为最终解决方案,以便其他人可以看到找到的解决方案。:)我从来没有弄明白为什么minsdkversion会被忽略,我最终用cordova而不是phonegap重新启动。