我正在开发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);
}
答案 0 :(得分:5)
此博客文章中提供了一个解决方案: cross window communication with cordova's inappbrowser
基本上,您可以反复使用父窗口中的executeScript()
到InAppBrowser实例(例如,每秒一次或两次),以检查是否已设置IAB中的值。按下IAB中的“关闭”按钮可以设置这样的变量。
当父窗口发现已在IAB中设置了变量时,父窗口使用IAB对close()
的引用。
答案 1 :(得分:5)
这里有一篇SO帖子描述了如何做到这一点。
您基本上必须通过调用window.open并挂钩到loadstop事件来获取对inapp浏览器的引用。在loadstop事件中检查url是否包含预定义的路径(如移动/关闭 - 但可以是任何内容),然后调用call close。
这是帖子
答案 2 :(得分:4)
这对我有用:
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
当你要关闭它时