【问题标题】:Cordova InAppbrowser plugin is not working in Desktop web browserCordova InAppbrowser 插件在桌面网络浏览器中不起作用
【发布时间】:2015-10-06 14:00:23
【问题描述】:

我正在开发一个混合应用程序。在我的应用程序中,我正在尝试使用 Oauth2 身份验证集成 API。所以在我的移动版本中,我使用 Cordova InAppBrowser 插件及其在移动设备中的工作。我正在尝试在桌面网络浏览器上使用相同的代码集,但是 loadstart 没有触发事件,我尝试使用它似乎没有触发的 load 事件正在工作。任何帮助。提前致谢。找到下面的工作代码。

var url1 = "xxx";

var ref = cordova.InAppBrowser.open(url1, '_system', 'location=yes');

    ref.addEventListener('loadstart', function(event) 
        {
         alert('start: ' + event.url);
         if((event.url).indexOf("http://localhost.com:8085/callback") == 0){
         alert('start: ' + event.url);
         var requestToken = (event.url).split("code=")[1];
         alert('Token: '+requestToken);
        ref.close(); 
         }
    });

适用于移动设备的代码。

【问题讨论】:

  • inAppBrowser 事件在你使用'_system'时不起作用
  • 使用应该适用于所有平台的 window.open(url)。如前所述,不要使用“_system”,因为这会尝试打开手机的原生浏览器(桌面上不存在)
  • 我一直在为移动设备使用** _blank**。我已经测试了桌面浏览器的 _system。所以我只是复制了浏览器代码。有没有使用 Cordova 插件的桌面浏览器解决方案?

标签: cordova cordova-plugins intel-xdk


【解决方案1】:

您应该使用特征检测来确定您是否在 Cordova 平台上,然后您可以采用if(browser) do this ; else if(cordova) do that 方法。换句话说,编写条件代码,这样当您在 Cordova 平台上时,您可以使用在那里工作的 inAppBrowser 解决方案,而当您在浏览器中时,使用在那里工作得最好的解决方案。

您可以通过测试 window.cordova 对象的存在来检测您是否在 Cordova webview 中(即使您的项目中没有插件,它也始终存在于 Cordova 3+ webview 中)。所以你会做这样的事情:

if( window.cordova ) {
    inAppBrowser solution ;
} else {
    standard browser solution ;
}

为了超级安全,您还应该在测试中包含对 inAppBrowser 的测试,以检查 window.cordova 的存在性——因为 JavaScript 在部署时无法帮助您确保这一点,但这只是我的看法。 :)

【讨论】:

  • 对于 InAppBrowser 解决方案,我已经通过 loadstart 事件从回调 URL 中捕获 requestToken。但是标准的浏览器解决方案,我尝试使用 load 事件,该事件没有触发。是否有任何事件侦听器可以从标准浏览器中的 window.open 捕获回调 URL
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多