Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让cordova InAppBrowser在使用Android设备时为用户提供关闭浏览器的方式?_Android_Cordova_Cordova 2.0.0_Inappbrowser - Fatal编程技术网

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

如何让cordova InAppBrowser在使用Android设备时为用户提供关闭浏览器的方式?,android,cordova,cordova-2.0.0,inappbrowser,Android,Cordova,Cordova 2.0.0,Inappbrowser,我正在使用cordova InAppBrowser在我的应用程序中显示外部站点的内容。当我在iPhone上打开浏览器时,InAppBrowser底部有一些按钮用于关闭浏览器或来回导航。Android设备上的InAppBrowser没有此类按钮,用户也没有明显的方式关闭浏览器 我知道如何以编程方式关闭InAppBrowser,但用户在使用Android设备时如何关闭它 我知道用户可以点击硬件后退按钮关闭浏览器,但(1)这不是直观的-后退按钮通常意味着“返回一个页面”,以及(2)我最终希望更改后退按

我正在使用cordova InAppBrowser在我的应用程序中显示外部站点的内容。当我在iPhone上打开浏览器时,InAppBrowser底部有一些按钮用于关闭浏览器或来回导航。Android设备上的InAppBrowser没有此类按钮,用户也没有明显的方式关闭浏览器

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

我知道用户可以点击硬件后退按钮关闭浏览器,但(1)这不是直观的-后退按钮通常意味着“返回一个页面”,以及(2)我最终希望更改后退按钮的行为,以返回在InApp浏览器内显示的站点内的页面,而不是关闭浏览器。

在通话结束时添加
“location=yes”
将在Android窗口顶部放置一个地址栏和“完成”按钮。(它显示在iOS窗口的底部)。单击“完成”关闭窗口

var ref = window.open('http://apache.org', '_blank', 'location=yes');

正如elMarquis所说,您需要添加“location=yes”,以便在Android设备上获得“Done”按钮。但是,如果您想自己完成按钮,而不需要地址栏,只需对cordova源代码进行一次更改,就相当容易了

我从谷歌集团得到了以下信息:

以下是一些分步说明:

  • 下载cordova源代码:

    git克隆https://github.com/apache/cordova-plugin-inappbrowser

  • 从下载commons编解码器库

  • 开放Android开发者工具
  • 将cordova项目导入您的工作区

    文件>导入…>将现有项目放入工作区

  • 创建一个
    libs
    目录,并将下载的
    commons-codec-1.7.jar
    文件复制到其中

  • gen
    文件夹添加到项目中(需要.classpath文件,但不包括在git下载中,因为git不允许空文件夹)
  • 转到项目>全部生成。项目的构建应该没有错误
  • 打开InAppBrowser.java并搜索“toolbar.addView(edittext);”(我下载的cordova版本中的第468行)
  • 把那句话注释掉
  • 重新构建项目
  • 将bin/cordova.jar文件复制到您正在使用cordova的任何项目中

  • 希望这对其他人有所帮助。

    为了保持选项“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);
    
    与原始代码相比:

    // 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);
    }
    

    刚刚遇到了一个解决方案,可以帮助你更好地满足自己的需求,和/或帮助他人

    总之,您可以创建一个“虚拟”HTML页面,在应用程序中添加JavaScript以检测何时加载该页面,并在加载该页面时关闭InApp浏览器


    请参见此处:

    这可以通过调整“InAppBrowser.java”来实现。我知道这有点奇怪,但这是我唯一的选择。但是,我对java文件所做的这些小调整现在允许我在我的应用程序中的页面中导航回来

    以下是在InAppBrowser.java中所做的更改, 在showWebPage方法中的“run”方法中,将有一个类似这样的侦听器代码

    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        public void onDismiss(DialogInterface dialog) {     
                            closeDialog();
                        }
    });
    
    在该行下方添加以下代码

    dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {                   
    @Override
         public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
             if (event.getAction()!=KeyEvent.ACTION_DOWN)
                 return true;               
             if(keyCode==KeyEvent.KEYCODE_BACK){
                 goBack();
                 return true;
             }else {
                 return false;
              }
          }
    });
    

    对于我们这些使用离子()和/或ngcordova()的人。以下代码将启动InApp浏览器,然后通过链接关闭对话框


    截至2016年4月,这些答案已经过时。我现在必须这么做,这是我的经验

    首先,Cordova/Ionic项目被分割成插件。我们需要的是回购协议

    步骤1

    首先,我们必须在本地某个地方克隆它,或者在github/bitbucket上分叉它。(对于每个新的项目设置,我们都需要永久性地克隆repo。)我们可以使用以下命令轻松克隆repo:

    git clone git@github.com:apache/cordova-plugin-inappbrowser.git
    
    步骤2

    然后我们必须对项目进行要求的更改。要使Android上的url栏行为与iOS中的行为相同,我们必须始终显示菜单栏,并且仅当用户请求菜单栏时才显示url栏。 控制这一点的代码位于
    /src/android/InAppBrowser.java
    文件中

    我们必须改变两者之间的界限。(注意:如果修改文件,这些行号可能会更改。)

    我们必须从这里更改代码

    // 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);
    }
    
    为此:

    // Add the views to our toolbar
    toolbar.addView(actionButtonContainer);
    if (getShowLocationBar()) {
        toolbar.addView(edittext);
    }
    toolbar.addView(close);
    
    main.addView(toolbar);
    
    因此,我们在这里所做的是,我们总是添加带有退出/前进/后退按钮的工具栏,并且仅当用户需要完整的工具栏时才添加url栏。这是iOS版本的行为

    此外,如果我们想删除前进/后退按钮,因为Android有一个本机后退按钮,那么我们必须将它们注释掉,并仅在用户需要完整菜单栏时添加它们。因此,我们的代码应该如下所示:

    // actionButtonContainer.addView(back);
    // actionButtonContainer.addView(forward);
    
    // Add the views to our toolbar
    toolbar.addView(actionButtonContainer);
    if (getShowLocationBar()) {
        toolbar.addView(edittext);
        // We add this here if the user want the full bar, then we need this buttons.
        actionButtonContainer.addView(back);
        actionButtonContainer.addView(forward);
    }
    toolbar.addView(close);
    
    步骤3

    我们必须将修改后的插件添加到我们的项目中,如果您只需要一次,那么只需运行

    cordova plugin add https://github.com/username/cordova-plugin-inappbrowser.git
    // or
    cordova plugin add https://UserName@bitbucket.org/UserName/cordova-plugin-inappbrowser.git
    
    而不是

    cordova plugin add cordova-plugin-inappbrowser 
    

    注意:您必须保留修改后的repo,因为每次设置项目时,
    cordova plugin add
    命令都会从存储库中获取if

    对于那些在Android(类似于iOS)的页脚中寻找本机“完成”按钮的人,我已经在appbrowser的
    cordova plugin上实现了这样一个功能

    更新日期:2018年1月

    我的公司已并入, 因此,您可以等待下一版本(将>=2.0.2)或直接从Github安装,例如:

    cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser
    
    原始答案

    该实施是目前(2017年12月4日)正在等待合并批准的扩展。一旦这样做了,我会打开一个单独的问题和公关合并
    cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser