alert() 未从 Cordova InAppBrowser 事件侦听器中显示 - 与 Cordova window.alert 挂钩冲突
alert() not displayed from Cordova InAppBrowser event listener - Conflict w/ Cordova window.alert hook
使用 Cordova CLI 版本 5.4.1,
平台是iOS,
运行 在 iOS 模拟器上
从我的应用程序的 onDeviceReady
处理程序中,我正在调用一个函数来设置一个挂钩,以便使用本机对话框显示警报,如下所示:
overrideBrowserAlert: function() {
if (navigator.notification) { // Override default HTML alert with native dialog
window.alert = function (message) {
navigator.notification.alert(
message, // message
null, // callback
"MyAppTitle", // title
'OK' // buttonName
);
};
}
},
大多数 alert
调用有效,但以下调用无效。
在某个阶段我会打开一个 InAppBrowser
window。单击 "Done" 按钮时,它会成功关闭。我已经为事件 exit
注册了一个事件监听器,它做了两件事:
alert("InAppBrowser window closed");
Make an AJAX call, get some HTML from a remote server and show it in a <div> element
问题出在这里:AJAX 调用成功,但未显示 alert
。这意味着 exit
事件已成功触发,仅 alert
调用有问题。
问题是这样解决的:猜测可能是范围或事件处理冲突,我注释掉了 window.alert
钩子的代码(即上面的 overrideBrowserAlert
调用),并且果然,InAppBrowser exit
事件处理程序中的警报有效。
我的问题是: 有谁知道如何解决这个冲突,以便 InAppBrowser exit
事件处理程序中的警报起作用并且 window.alert
挂钩也启用了?
谢谢!
这是 cordova-plugin-inappbrowser 上的错误
我已经填写了一个问题
https://issues.apache.org/jira/browse/CB-10855
您可以通过将关闭方法更改为
来修复它
- (void)close
{
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
self.currentURL = nil;
__weak CDVInAppBrowserViewController* weakSelf = self;
// Run later to avoid the "took a long time" log message.
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf respondsToSelector:@selector(presentingViewController)]) {
[[weakSelf presentingViewController] dismissViewControllerAnimated:YES completion:^{
if ((weakSelf.navigationDelegate != nil) && [weakSelf.navigationDelegate respondsToSelector:@selector(browserExit)]) {
[weakSelf.navigationDelegate browserExit];
}
}];
} else {
[[weakSelf parentViewController] dismissViewControllerAnimated:YES completion:nil];
}
});
}
使用 Cordova CLI 版本 5.4.1, 平台是iOS, 运行 在 iOS 模拟器上
从我的应用程序的 onDeviceReady
处理程序中,我正在调用一个函数来设置一个挂钩,以便使用本机对话框显示警报,如下所示:
overrideBrowserAlert: function() {
if (navigator.notification) { // Override default HTML alert with native dialog
window.alert = function (message) {
navigator.notification.alert(
message, // message
null, // callback
"MyAppTitle", // title
'OK' // buttonName
);
};
}
},
大多数 alert
调用有效,但以下调用无效。
在某个阶段我会打开一个 InAppBrowser
window。单击 "Done" 按钮时,它会成功关闭。我已经为事件 exit
注册了一个事件监听器,它做了两件事:
alert("InAppBrowser window closed");
Make an AJAX call, get some HTML from a remote server and show it in a <div> element
问题出在这里:AJAX 调用成功,但未显示 alert
。这意味着 exit
事件已成功触发,仅 alert
调用有问题。
问题是这样解决的:猜测可能是范围或事件处理冲突,我注释掉了 window.alert
钩子的代码(即上面的 overrideBrowserAlert
调用),并且果然,InAppBrowser exit
事件处理程序中的警报有效。
我的问题是: 有谁知道如何解决这个冲突,以便 InAppBrowser exit
事件处理程序中的警报起作用并且 window.alert
挂钩也启用了?
谢谢!
这是 cordova-plugin-inappbrowser 上的错误
我已经填写了一个问题 https://issues.apache.org/jira/browse/CB-10855
您可以通过将关闭方法更改为
来修复它- (void)close
{
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
self.currentURL = nil;
__weak CDVInAppBrowserViewController* weakSelf = self;
// Run later to avoid the "took a long time" log message.
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf respondsToSelector:@selector(presentingViewController)]) {
[[weakSelf presentingViewController] dismissViewControllerAnimated:YES completion:^{
if ((weakSelf.navigationDelegate != nil) && [weakSelf.navigationDelegate respondsToSelector:@selector(browserExit)]) {
[weakSelf.navigationDelegate browserExit];
}
}];
} else {
[[weakSelf parentViewController] dismissViewControllerAnimated:YES completion:nil];
}
});
}