Javascript 如何在Phonegap应用程序中关闭InApp浏览器本身?

Javascript 如何在Phonegap应用程序中关闭InApp浏览器本身?,javascript,cordova,inappbrowser,Javascript,Cordova,Inappbrowser,我正在开发Phonegap应用程序,目前正在使用InAppBrowser显示外部页面。在一些外部页面上,我放置了一个关闭按钮,我想关闭InApp浏览器本身。因为InAppBrowser显示这些页面,这就是为什么它的引用本身无法访问以关闭它,请不要建议我使用ChildBrowser插件 window.close(); //Not Worked for me or iabRef.close(); //Also not Worked for me because iabRef is not ac

我正在开发
Phonegap
应用程序,目前正在使用
InAppBrowser
显示外部页面。在一些外部页面上,我放置了一个关闭按钮,我想关闭InApp浏览器本身。因为InAppBrowser显示这些页面,这就是为什么它的引用本身无法访问以关闭它,请不要建议我使用ChildBrowser插件

window.close(); //Not Worked for me
or  
iabRef.close();  //Also not Worked for me because iabRef is not accessible on InAppBrowser. It is created on Parent Window
一些安卓设备和iOS设备会显示一个“完成”按钮来关闭它。iPad也会显示“完成”按钮。但对于安卓平板电脑来说,并没有任何一种按钮可以关闭它

更新:-

这是我的全部代码:-

var iabRef = null; 
function iabLoadStart(event) {
}
function iabLoadStop(event) {
}
function iabClose(event) { 
    iabRef.removeEventListener('loadstart', iabLoadStart);      
    iabRef.removeEventListener('loadstop', iabLoadStop); 
    iabRef.removeEventListener('exit', iabClose); 
}
function startInAppB() {
    var myURL=encodeURI('http://www.domain.com/some_path/mypage.html');
    iabRef = window.open(myURL,'_blank', 'location=yes');    
    iabRef.addEventListener('loadstart', iabLoadStart);
    iabRef.addEventListener('loadstop', iabLoadStop);
    iabRef.addEventListener('exit', iabClose);
}

这篇博文提供了一个解决方案:

本质上,您可以反复(例如每秒一次或两次)使用父窗口中的
executeScript()
到InAppBrowser实例,以检查IAB中的值是否已设置。按下IAB中的“关闭”按钮可以设置这样一个变量


当父窗口发现变量已在IAB中设置时,父窗口将IAB引用用于
close()
它。

这里有一篇SO文章介绍了如何执行此操作

基本上,您必须通过调用window.open并钩住loadstop事件来获取对inapp浏览器的引用。在loadstop事件中,检查url是否包含预定义路径(如mobile/close,但可以是任何路径),然后调用close

这是邮局

这对我很有效:

var win=window.open( "myurl", "_blank");
win.addEventListener( "loadstop", function(){
       var loop = window.setInterval(function(){
           win.executeScript({
                   code: "window.shouldClose"
               },
               function(values){
                   if(values[0]){
                     win.close();
                     window.clearInterval(loop);
                   }
               }
           );
       },100);
   });
在调用的窗口中,只需执行以下操作:

window.shouldClose=true

当你想关闭它时

请显示你打开iInApp浏览器的其余代码为什么不使用导航栏上的后退按钮关闭它?当应用浏览器显示页面时,会有一些链接,用户可以重定向到其他链接,这就是为什么后退按钮不适合我关闭的原因。非常感谢@Torsten Simon. 您认为我们可以将参数值[1]和值[2]等从站点传递到应用程序吗。谢谢,我只是通过简单地执行JSON.stringify(object_in_site)来实现;执行var object=JSON.parse(值[0]);在应用程序内部。这当然只适用于可序列化数据(如字符串和数字),但如何执行它呢?在窗口之后。shouldClose=true还是在之前?此外,localStore对我也不起作用,所以JSON是唯一的希望。@PieroAlberto是的,你是对的,但该方法经常被重写,另请参见: