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

cordova inappbrowser cannot open an external url on iOS

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

我已经查看了这些问题 iOS / Cordova: InAppBrowser not working - - PhoneGap Build: how to open external url in device browser on Android? - phonegap open link in browser 但不幸的是 none 这些问题帮助我解决了问题。


第一个假设可能是一条错误消息警报:错误消息 在我正在测试我的应用程序的 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 (link 到 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 and the Phonegap Mobile App。桌面应用程序创建项目目录,而移动应用程序和 google ripple 模拟器连接到桌面应用程序并且是我的测试环境。最后但并非最不重要的一点是,在 ripple 模拟器上,外部 url 成功打开,而它没有在移动应用程序上打开,initialization error 在应用程序打开时抛出。

@Riccardo 浏览 phonegap 文档为此添加您的代码片段,onDeviceReady 并尝试。InAppBrowser

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

这是link

中答案的代码

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
    }
}
<a href="http://whosebug.com">

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

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

在谷歌搜索网络后,我修复了 InAppBrowser 打开外部 URL。基本上,ios 平台的 InAppBrowser 插件存在错误。当您单击 link 时,警报出现在 iPhone 上。 我使用旧版本的 InAppbrowser 插件修复了这个错误。现在一切正常。