11

我正在开发Phonegap应用程序,目前我正在使用InAppBrowser它来显示外部页面。在一些外部页面上,我放置了一个关闭按钮,我想关闭 InAppBrowser 本身。因为 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

某些 Android 设备和 iOS 设备会显示完成按钮以将其关闭。以及 iPad 也显示完成按钮。但在 Android 平板电脑的情况下,没有任何类型的按钮可以关闭它。

更新:-

这是我的完整代码:-

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

3 回答 3

10

这对我有用:

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

当你想关闭它时

于 2018-04-26T16:01:58.943 回答
6

这篇博文中提供了一个解决方案: cross window communication with cordova's inappbrowser

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

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

于 2014-06-07T09:21:33.157 回答
5

这里有一个 SO post 描述了如何做到这一点。

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

这是帖子

https://stackoverflow.com/a/15981972/54805

于 2014-07-15T16:45:31.657 回答