我有一个与Cordova 3.4.0上的inappbrowser不兼容的网页链接(它不加载 - 它是来自网站的脚本)所以我想使用原生移动浏览器(iOS和Android)来查看网站而不是inappbrowser。这本身就没问题。我只是简单地将inappbrowser设置为_system。
当我尝试向混合中添加一个通知对话框以警告最终用户他们即将被从应用程序中取出并进入他们的本机浏览器时,我的问题就出现了。为此,我试图使用Cordovas navigator.notification.confirm插件。当用户点击原始链接时,这应该显示一个带有选项按钮的对话框(在这种情况下为ok和cancel)。然后,当按下ok时,对话框调用运行inappbrowser的函数,或者如果按下cancel,则对话框关闭并将用户返回给应用程序。
发生的事情是对话框显示得很好,但是,ok和cancel按钮都只是关闭对话框而不启动应该依次启动本机Web浏览器的功能。这是我的javascript:
<script type="text/javascript" charset="utf-8">
function payrent(){
navigator.notification.confirm(
'You are about to leave this app and open your default web browser. Continue?',
payrent1(),
'Leave App?',
['Ok','Cancel']
);
}
</script>
<script type="text/javascript" charset="utf-8">
function payrent1(buttonIndex){
if (buttonIndex==1){
window.open('https://tenants.saffronhousing.co.uk/scripts/cgiip.exe/WService=live-openaccess/ibsxmlpr.p?docid=login', '_system', 'location=no');
}
}
</script>
有关正在发生的事情的任何想法?我已经在代码中调整了我能想到的所有内容,我可以得到的唯一结果就是对话框会短暂显示,然后无论如何都会启动inappbrowser,无论是否按下任何按钮!
非常感谢任何帮助。
答案 0 :(得分:4)
只需从回调参数中删除括号:
function payrent() {
navigator.notification.confirm(
'You are about to leave this app and open your default web browser. Continue?',
payrent1, // <-- no brackets
'Leave App?',
['Ok','Cancel']
);
}
使用括号,函数立即被调用,其结果(undefined
)作为回调传递给confirm函数。
如果没有括号,则会传递函数本身。