升级到cordova 3.6.3后,“tel”,“sms”和“mailto”不再在Android上工作

我最近将基于cordova的Android应用程序从3.5.0升级到3.6.3。 “tel”,“sms”和“mailto”的特殊链接停止工作。 点击时,没有任何反应。 有什么我可以在AndroidManifest.xml,或Confix.xml或其他任何让他们回来工作?

我build立了两个相同的,非常简单的android应用程序来certificate我的怀疑,一个是cordova 3.5.0,一个是3.6.3。 他们都有一个简单的链接:

<a href="tel:1(858)xxx-xxxx">Call</a> 

第一个工作,第二个不工作。

我认为他们添加了一个安全function,以某种方式阻止意图。

PS:两个应用程序都是这样构build的:

 cordova create app com.tmp.app "App" cordova platform add android 

在index.html中,我在设备就绪区块中添加了上面的电话链接。

请帮忙。

Solutions Collecting From Web of "升级到cordova 3.6.3后,“tel”,“sms”和“mailto”不再在Android上工作"

我终于find了答案。 您只需将以下内容添加到config.xml即可:

 <access origin="tel:*" launch-external="yes"/> <access origin="geo:*" launch-external="yes"/> <access origin="mailto:*" launch-external="yes"/> <access origin="sms:*" launch-external="yes"/> <access origin="market:*" launch-external="yes"/> 

我希望这有助于每个人。

这一切都是由IBM开始的!

IBM Cordova安全问题

我有一个基于3.5.1版本的应用程序,所有的特殊链接工作正常 。 但是当我升级最新的版本3.6.3,然后他们没有工作。

所以我做了下面的代码中的变化,现在他们工作正常。

  1. 添加InAppBrowser插件

    cordova插件添加org.apache.cordova.inappbrowser

  2. 在您的JS文件中创build自定义函数,以在InApp浏览器中打开特殊链接

     var app = { initialize: function() { this.bindEvents(); }, bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false); }, onDeviceReady: function() { app.receivedEvent('deviceready'); }, openNativeAppWindow: function(data) { window.open(data, '_system'); } 

    };

  3. 你正在调用像短信或电话的特殊链接的地方,然后传递你的自定义url与数据,让它打开本地浏览器窗口,反过来将推动本地应用程序来处理特殊的URL。

几个例子:

 <br><br><input type="button" onClick="app.openNativeAppWindow('http://google.com')" value="Open Google"/> <br><br><a onClick="app.openNativeAppWindow('geo://0,0?q=dallas')" data-rel="external">google maps</a> <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=Bacau')">Geolocation Test</a> <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=34.99,-106.61(Treasure)')">longitude & latitude with a string label</a> <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA')">street address Test</a> <br><br><a onClick="app.openNativeAppWindow('sms:2125551212')">SMS</a> <br><br><a onClick="app.openNativeAppWindow('mms:2125551212')">MMS</a> <br><br><a onClick="app.openNativeAppWindow('tel:2125551212')">Open Phone Dialer</a> 

从cordova4.0,你必须包括白名单插件。

 <gap:plugin name="cordova-plugin-whitelist" source="npm" /> <allow-intent href="tel:*" /> 

https://github.com/apache/cordova-plugin-whitelist

修改cordova白名单

其中一个安全修复包括为非http/s协议创build一个新的白名单。 如果您的应用程序使用除http://https://之外的其他协议(例如sms:mailto:geo:tel:等),则需要进行一些configuration更改以将这些协议添加到白名单。

这很容易做到:

  1. 打开Cordova config.xml文件,位于:yourProject – > apps – > yourProject – > android – > native – > res – > xml – > config.xml。 注意:如果您的文件位于您的项目 – >应用程序 – > yourProject – > android – > nativeResources – > res – > xml,您将不得不对这个文件进行更改(在nativeResources文件夹下),因为如果这个文件存在,当应用程序重build时它将覆盖/ native /文件夹中的config.xml。
  2. 滚动到您的白名单条目。 你应该看到像这样列出的项目:

     <access origin="https://my.company.com/resources" /> <access origin="http://*.othersupplier.com" /> 
  3. 对于您使用的每个非http / https协议,您都必须添加如下白名单条目:

     <access origin="sms://*" launch-external="true" /> <access origin="mailto://*" launch-external="true" /> 

launch-external属性将告诉Cordova允许此URL由Android系统中的其他应用程序处理 – 而不是由当前运行的Cordova / Worklight应用程序处理。

这意味着当用户点击<a href="sms:555...">链接时,Android会让任何注册到sms:应用程序sms:处理请求。

如果白名单中的唯一条目如下所示:

 <access origin="*" /> 

那么你的应用程序将允许资源请求到任何互联网资源,这可能会打开你的应用程序某些types的攻击。

您应该列出您想要访问的标签中的特定域名。

如果您的白名单如下所示:

 <access origin="https://www.ibm.com" /> <access origin="https://my-worklight-server.company.com" /> 

而在你的应用程序中,你使用mailto:协议来打开用户的电子邮件客户端, geo:协议来显示地图,那么你应该修改白名单,如下所示:

 <access origin="https://www.ibm.com" /> <access origin="https://my-worklight-server.company.com" /> <access origin="mailto://*" launch-external="true" /> <access origin="geo://*" launch-external="true" /> 

HTML:

<a href="tel:+212x-xx-xx-xx-xx">Call</a>

添加到文件“config.xml”:

 <access origin="tel:*" launch-external="yes"/> 

资源 :

https: //www.ibm.com/developerworks/community/blogs/worklight/entry/action_required_cordova_android_security_update ? lang = en`

这篇文章可能会帮助你: https : //www.simb.co/mailto-links-in-phonegap-cordova/

 window.location.href = "mailto:?subject=Something to share with you..."; 

也适用于iOS。