cordova inappbrowser无法在iOS上打开外部网址

问题描述:

我正在开发手机中的混合应用程序,基本上在索引页面中有一个按钮,每次点击都会打开一个外部URL。我在Android上成功并在iOS上失败。cordova inappbrowser无法在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.open 方法的onclick事件做了错误处理,因为当我点击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>


正如你可以看到上面这段代码的作品,太对谷歌的纹波仿真器的工作原理和我刚才在说我的问题的开始它也适用于Android(链接到Android网络应用程序https://play.google.com/store/apps/details?id=com.phonegap.unoxtutti&hl=it) 事实上,我不知道什么问题可能是在这种故障背后,前者或t他后一种假设。

除了科尔多瓦插件inappbrowser是在config.xml中

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

我真的无法找到错误,但我希望能有你提供必要的信息,以帮助我解决这个看似无法解决的问题

测试环境为Google Ripple Emulator,Phonegap Desktop AppPhonegap Mobile App。桌面应用程序创建项目的目录,而移动应用程序和谷歌纹波模拟器连接到桌面应用程序,并且是我的测试环境。最后但并非最不重要的是,在外部网址成功打开时,它不会在移动应用程序中打开,并且应用程序打开时会抛出该外部网址。

+1

你列出了你的网址吗?见例如[Cordova Docs](https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/)。 – Beat

+0

@Beat我有意图的白名单,适用于window.open方法是否足够,或者我需要白名单我试图打开的确切URL? – Riccardo

+1

@Beat这个导航白名单是什么意思? Riccardo

经过很长时间在Google上搜索网页后,我使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 
 
    } 
 
}
<a href="http://*.com">

基本上所有我做在上面的代码片段是检查设备是否是iOS或Android和取决于使用的设备,我使用不同的方法。这适用于iOS Android和浏览器。我真的希望这个答案能够帮助尽可能多的人。需要

设备插件和插件InAppBrowser其他验证码失败

@Riccardo通过phonegap文档为此添加您的代码片段onDeviceReady并尝试它。 InAppBrowser

+1

我已经在iOS设备上和在线涟漪模拟器上测试过该应用程序,因此让我告诉你我在模拟器上成功并在Android上测试设备时失败一切工作完美因此,我敢肯定,这个问题是与我的问题的第一个假设有关仔细阅读我的问题,而且我已经尝试了你的建议,我仍然有这个iOS错误 – Riccardo

在谷歌上搜索网页花费时间之后,我固定InAppBrowser打开外部URL。基本上,ios平台的InAppBrowser插件存在bug。当您点击链接时,警报将出现在iPhone上。 我通过使用旧版本的InAppbrowser插件修正了这个错误。现在它工作得很好。