Phonegap Build:为API v3将Google Map域列入白名单

时间:2013-10-15 12:07:36

标签: android google-maps-api-3 cordova whitelist

我在使用两部真正的Android手机上正确显示地图时遇到了一些问题 - 一部运行2.2.2,一部运行4.2.2。后者在地图方面总是给我一些悲伤。我把它放在另一个线程here中,因为我已经部分解决了它。

注意:我正在使用Phonegap Build with Dreamweaver CS6。只是一个没有清单xml文件的config.xml。

现在我有另一个问题,我必须将所有域列入白名单,以便地图在4.2.2上正常运行,我不知道为什么。 最初我在config.xml中有这个:

<access origin="*.googleapis.com" />
<access origin="*.gstatic.com" />
<access origin="*.google.com" />
<access origin="maps.googleapis.com" />
<access origin="maps.gstatic.com" />
<access origin="mt0.googleapis.com" />
<access origin="mt1.googleapis.com" />
<access origin="csi.gstatic.com" />

虽然这对Android 2.2.2非常有效,但我会在4.2.2上遇到以下问题:

  • 地图底部缺少最后一排瓷砖(如果我使用HTTPS作为谷歌地图src)
  • 标记根本不会显示

通过将所有内容列入白名单,所有这些问题都消失了。但是我不想将所有内容列入白名单,所以如果我在这里遗漏了什么,有谁知道吗?

任何帮助都非常感激。

编辑:据我所知,通过使用* .googleapis.com,我还会包含相似的其余白名单域名。但是我在搜索中已经注意到几次iOS要求明确列出域名。虽然目前这可能不适用,但我确实打算在iOS上使用这个应用程序,所以我把它留在了(除非有人能告诉我它完全无用而且不需要; - )。

////////更新1 ////////

在浏览Chrome开发者工具的网络标签后,我提取了谷歌地图访问的所有网址。通过明确说明它们中的每一个,一切正常就好了:

    <access origin="https://mts.googleapis.com" subdomains="true"/>
    <access origin="https://mts0.googleapis.com" subdomains="true"/>
    <access origin="https://mts1.googleapis.com" subdomains="true"/>
    <access origin="https://maps.googleapis.com" subdomains="true"/>
    <access origin="https://fonts.googleapis.com" subdomains="true"/>
    <access origin="https://maps.gstatic.com" subdomains="true"/>
    <access origin="https://csi.gstatic.com" subdomains="true"/>
    <access origin="https://themes.googleusercontent.com" subdomains="true"/>

这些可能会有所变化,所以如果我可以在每个域前面使用通配符*会很好,但这不起作用。我已经尝试了以下两项没有成功

    <access origin="*.googleapis.com" subdomains="true"/>
    <access origin="*.gstatic.com" subdomains="true"/>
    <access origin="*.googleusercontent.com" subdomains="true"/>


    <access origin="https://*.googleapis.com" subdomains="true"/>
    <access origin="https://*.gstatic.com" subdomains="true"/>
    <access origin="https://*.googleusercontent.com" subdomains="true"/>

任何人都有任何想法,为什么我在这些情况下无法使用通配符? 欢呼声。

////////更新2 /答案////////

经过多次实验,我找到了答案。看起来你必须非常具体地说明如何在config.xml中编写标签,特别是在允许子域时 - 显然指定子域不适用于通配符,所以你需要两个标签块。我终于使用https使用以下两个设备正常工作:

    <access origin="*.google.com" />
    <access origin="*.googleapis.com" />
    <access origin="*.gstatic.com" />
    <access origin="*.googleusercontent.com" />
    <access origin="google.com" subdomains="true"/>
    <access origin="googleapis.com" subdomains="true"/>
    <access origin="gstatic.com" subdomains="true"/>
    <access origin="googleusercontent.com" subdomains="true"/>

希望这对某人有用。我仍然不明白为什么它在旧版Android上运行良好。也许有人可以帮助启发我,如果他们感觉如此?

1 个答案:

答案 0 :(得分:1)

白名单网站的语法随PhoneGap版本而变化。如果您使用的是3.1或更高版本,请参阅此文档以获取语法:http://docs.phonegap.com/en/3.1.0/guide_appdev_whitelist_index.md.html。我想这可能就是为什么你的通配符不适合你。

我正在使用以下内容,它可以在我的PhoneGap应用中显示我的Google地图:

<access origin="*://*.googleapis.com/*" subdomains="true" />
<access origin="*://*.gstatic.com/*" subdomains="true" />
<access origin="*://*.google.com/*" subdomains="true" />
<access origin="*://*.googleusercontent.com/*" subdomains="true" />