cordova inappbrowser 无法在 iOS 上打开外部 url

Posted

技术标签:

【中文标题】cordova inappbrowser 无法在 iOS 上打开外部 url【英文标题】:cordova inappbrowser cannot open an external url on iOS 【发布时间】:2016-09-26 09:49:15 【问题描述】:

我正在 phonegap 中开发一个混合应用程序,基本上我在索引页面中有一个按钮,只要单击它就会打开一个外部 URL。我在 android 上成功,在 ios 上失败。

我已经查看了这些问题 iOS / Cordova: InAppBrowser not working - cordova/phonegap onclick doesn't work - PhoneGap Build: how to open external url in device browser on Android? - phonegap open link in browser 但不幸的是,这些问题都没有帮助我解决问题。


第一个假设可能是错误消息警报:错误消息 在我正在测试我的应用程序的 iPhone 上是:[ERROR] Error initializing Cordova: Missing Command Error

第二个假设我对window.openonclick 事件做错了 方法,因为当我单击 iOS 测试设备上的打开按钮时,没有任何反应。

代码如下:

document.getElementById("openBrowser").addEventListener("click", function()
        var ref = window.open('http://www.espn.com', '_self', 'location=yes');
         ref.addEventListener('loadstart', function(event)  alert('start: ' + event.url); );
         ref.addEventListener('loadstop', function(event)  alert('stop: ' + event.url); );
         ref.addEventListener('loaderror', function(event)  alert('error: ' + event.message); );
         ref.addEventListener('exit', function(event)  alert(event.type); );
    );
<button id="openBrowser">APRI</button>

正如您所看到的,上面的代码也可以在 google 波纹模拟器上运行,正如我在问题开始时所说的,它也可以在 Android 上运行(链接到 android 网络应用程序https://play.google.com/store/apps/details?id=com.phonegap.unoxtutti&hl=it) 事实上,无论是前者还是后者的假设,我都不确定这个故障背后可能存在什么问题。

除了cordova插件inappbrowser在config.xml中

    <plugin name="org.apache.cordova.inappbrowser" />

我真的找不到错误,但我希望为您提供必要的信息来帮助我解决这个看似无法解决的问题

测试环境为Google Ripple Emulator、Phonegap Desktop App 和Phonegap Mobile App。桌面应用程序创建项目目录,而移动应用程序和谷歌波纹模拟器连接到桌面应用程序并且是我的测试环境。最后但并非最不重要的一点是,在涟漪模拟器上,外部 url 成功打开,而它没有在移动应用上打开,initialization error 在应用打开时抛出。

【问题讨论】:

您是否已将您的网址列入白名单?参见例如Cordova Docs. @Beat 我有适用于 window.open 方法的意图白名单,这样就足够了,还是我需要将我要打开的确切网址列入白名单? @Beat 这个导航白名单是什么意思? mywhitelistwebsite.com*" /> 您对引号标记的滥用确实令人困惑 @OliverSalzburg 你能帮我编辑问题以有效地删除引号标记吗?很抱歉问,但我是这里的新手,我无法提出完美的问题,但很抱歉误导你,这不是我的本意 【参考方案1】:

在谷歌上搜索了很长时间后,我让 InAppBrowser 打开了一个外部 URL。 this is the SO answer who solved my bug

这是链接中答案的代码

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() 

    // Mock device.platform property if not available
    if (!window.device) 
        window.device =  platform: 'Browser' ;
    

    handleExternalURLs();


function handleExternalURLs() 
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') 
        $(document).on('click', 'a[href^="http"]', function (e) 
            var url = $(this).attr('href');
            navigator.app.loadUrl(url,  openExternal: true );
            e.preventDefault();
        );
    
    else if (device.platform.toUpperCase() === 'IOS') 
        $(document).on('click', 'a[href^="http"]', function (e) 
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        );
    
    else 
        // Leave standard behaviour
    
&lt;a href="http://***.com"&gt;

基本上我在上面的 sn-p 中所做的只是检查设备是 iOS 还是 Android,并且根据使用的设备,我使用不同的方法。这适用于 iOS Android 和浏览器。我真的希望这个答案能帮助尽可能多的人。

需要设备插件和 InAppBrowser 插件,否则此代码将失败

【讨论】:

【参考方案2】:

花时间在网上搜索后,我修复了 InAppBrowser 打开一个外部 URL。基本上,iOS 平台的 InAppBrowser 插件存在错误。当您单击该链接时,警报会出现在 iPhone 上。 我通过使用旧版本的 InAppbrowser 插件修复了这个错误。现在它运行良好。

【讨论】:

【参考方案3】:

@Riccardo 浏览 phonegap 文档,添加您的代码 sn-p on, onDeviceReady 并尝试一下。InAppBrowser

【讨论】:

我已经在 iOS 设备和在线波纹模拟器上测试了该应用程序,所以让我告诉你,我在模拟器上成功并在测试设备上失败,而在 Android 上一切正常,因此我'我很确定这个问题与我的问题的第一个假设有关,仔细阅读我的问题,而且我已经尝试过你的建议,但我仍然有这个 iOS 错误

以上是关于cordova inappbrowser 无法在 iOS 上打开外部 url的主要内容,如果未能解决你的问题,请参考以下文章

Cordova/PhoneGap 打开下载的文件 (InAppBrowser)

位置栏未出现在 InAppBrowser for iOS、Cordova 中

cordova插件:inappbrowser

[Cordova inAppBrowser 在App内打开浏览器]

如何在cordova项目中异步打开inappbrowser

Cordova InAppBrowser立即关闭iOS 13