升级到cordova 3.6.3后,"tel","sms"和"mailto"不再在Android中运行

abe*_*abi 35 android cordova

我最近将基于cordova的Android应用程序从3.5.0升级到3.6.3.特殊链接"tel","sms"和"mailto"停止工作.点击后,没有任何反应.我可以在AndroidManifest.xml,Confix.xml或其他任何东西中做些什么来让它们恢复工作吗?

我构建了两个相同且非常简单的Android应用程序来证明我的怀疑,一个用cordova 3.5.0和一个用3.6.3.它们都有一个简单的链接:

<a href="tel:1(858)xxx-xxxx">Call</a>
Run Code Online (Sandbox Code Playgroud)

第一个工作,第二个工作不起作用.

我认为他们添加了一种安全功能,以某种方式阻止意图.

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

cordova create app com.tmp.app "App"
cordova platform add android
Run Code Online (Sandbox Code Playgroud)

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

请帮忙.

abe*_*abi 91

我终于找到了答案.您所要做的就是将以下内容添加到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"/>
Run Code Online (Sandbox Code Playgroud)

我希望这有助于每个人.

这一切都始于IBM!

IBM Cordova安全问题

  • 在我删除之前,这对我不起作用:<access origin ="*"/>. (8认同)
  • 这个`launch-external`目前没有在Whitelist插件中记录,但根据代码,它与`<allow-intent>`标签的作用相同 (2认同)

AAh*_*had 8

我有一个基于3.5.1版本的应用程序,所有特殊链接工作正常.但是当我在最新版本3.6.3上升级时,它们无法正常工作.

所以我在代码中做了以下更改,现在它们工作正常.

  1. 添加InAppBrowser插件

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

  2. 在JS文件中创建自定义函数以在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');
        }
    
    Run Code Online (Sandbox Code Playgroud)

    };

  3. 您调用特殊链接(如短信或电话)的地方然后使用数据传递您的自定义网址,并让它打开本机浏览器窗口,这反过来将推动本机应用程序处理特殊网址.

几个例子:

<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>
Run Code Online (Sandbox Code Playgroud)


alm*_*lmo 5

从 Cordova 4.0 开始,您必须包含白名单插件。

<gap:plugin name="cordova-plugin-whitelist" source="npm" />
<allow-intent href="tel:*" />
Run Code Online (Sandbox Code Playgroud)

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