如何使用cordova InAppBrowser为用户提供在使用Android设备时关闭浏览器的方法?

Tro*_*roy 20 android cordova cordova-2.0.0 inappbrowser

我正在使用cordova InAppBrowser来显示我应用中外部网站的内容.当我在iPhone上打开浏览器时,InAppBrowser底部有一些按钮用于关闭它或来回导航.Android设备上的InAppBrowser没有这样的按钮,并且没有明显的方式让用户关闭浏览器.

我知道如何以编程方式关闭InAppBrowser,但是在使用Android设备时用户如何关闭它?

我知道用户能打到硬件后退按钮关闭浏览器,但(1)这不是直观的 - 后退按钮通常意味着"回去的网页",和(2)我最终想改变的行为返回按钮返回显示在InAppBrowser内部的站点内的页面,而不是关闭浏览器.

Sto*_*one 14

对于我们这些使用Ionic(ionicframework.com)和/或ngcordova(ngcordova.com)的人.以下代码将启动inappbrowser,然后通过链接关闭对话框<a href="/mobile/close">close</a>.

  $cordovaInAppBrowser.open('http://localhost:3000/#/mypath/', '_blank', options).then((event) ->
    # success
    return
    ).catch (event) ->
      # error
      return

  $rootScope.$on '$cordovaInAppBrowser:loadstart', (e, event) ->
    $log.log 'loadstart', e, event
    if event.url.match('mobile/close')
      $cordovaInAppBrowser.close()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此答案假设您可以控制框架中加载的页面(或者至少您知道它在某处包含某个链接).如果要加载任意URL(并让用户自由导航)并仍然为用户提供关闭InAppBrowser的选项,则可能需要在IAB外部使用一个按钮.但是如果您控制加载的页面,这可能是最简单的解决方案.替代方案是[localstorage polling](http://www.telerik.com/blogs/cross-window-communication-with-cordova's-inappbrowser) (2认同)

elM*_*uis 11

添加"location=yes"到通话结束时,会在Android窗口顶部放置一个地址栏和DONE按钮.(它出现在iOS窗口的底部).单击"完成"将关闭窗口.

var ref = window.open('http://apache.org', '_blank', 'location=yes');
Run Code Online (Sandbox Code Playgroud)

  • 我必须显示丑陋的地址栏才能在Android上获得完成按钮?男人,那很臭...我有点喜欢它在iOS设备上的工作方式(没有地址栏,但仍然有一个完成按钮).我认为InAppBrowser开发人员会在两个或更多选项之间获得更多的一致性,因为项目会成熟一点......我会等待一段时间,看看是否有其他人有任何想法.如果没有,我会将您的答案标记为已接受的答案.感谢您的投入! (2认同)

Dav*_*den 10

对于那些希望在页脚为Android(相似于iOS)原生"完成"按钮,我已经实现了这样的功能,这个叉子cordova-plugin-inappbrowser.

更新:2018年1月

我的pull请求已合并到官方插件仓库中,因此您可以等待下一个版本(将> = 2.0.2)或直接从Github安装,例如:

cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser
Run Code Online (Sandbox Code Playgroud)

原始答案

该实施是PR#246的扩展,目前(2017年12月4日)正在等待批准合并.一旦完成,我将打开一个单独的问题和PR将其合并回主人cordova-plugin-inappbrowser.

以下是一些相关选项的截图:

位置= YES,页脚= YES

位置=没有,页脚= YES

位置= YES,页脚= YES,closebuttoncaption =完成

位置=没有,页脚= YES,closebuttoncaption =完成,closebuttoncolor =#0000FF

位置=没有,页脚= YES,footercolor =#0000FF,closebuttoncaption =完成

位置=没有,页脚= YES,footercolor =#00FF00,closebuttoncaption =完成,closebuttoncolor =#0000FF

位置=没有,页脚= YES,footercolor =#CC000000,closebuttoncaption =完成,closebuttoncolor =#00FFFF


小智 5

要保持选项'location = yes'在Android和iOS上的行为相同,我建议使用以下更改来修改Troy的修复,移动if语句来控制"toolbar.addView(edittext);" 而不是整个工具栏.

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
if (getShowLocationBar()) {
    toolbar.addView(edittext);
}
toolbar.addView(close);

// Add our toolbar to our main view/layout
main.addView(toolbar);
Run Code Online (Sandbox Code Playgroud)

与原始代码相比:

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
toolbar.addView(edittext);
toolbar.addView(close);

// Don't add the toolbar if its been disabled
if (getShowLocationBar()) {
    // Add our toolbar to our main view/layout
    main.addView(toolbar);
}
Run Code Online (Sandbox Code Playgroud)