Reputation: 3943
I am using UIWebView
to load a URL.
Inside the page of that URL, it uses alert("whatever msg")
as JavaScript. My UIWebView
will pop up a window and show that alert message.
Is there a way to disable this kind of popup window or JavaScript alert window?
Upvotes: 17
Views: 12620
Reputation: 93
let script = """
window.alert=window.confirm=window.prompt=function(n){},
[].slice.apply(document.querySelectorAll('iframe')).forEach(function(n){if(n.contentWindow != window){n.contentWindow.alert=n.contentWindow.confirm=n.contentWindow.prompt=function(n){}}})
"""
webView.evaluateJavaScript(script, completionHandler: nil)
Upvotes: 1
Reputation: 278
Since a UIWebView
translates all Javascript alerts into native UIAlertViews
it is fairly simple to block it on the native end. Looking into UIAlertView.h
there is only one public method for showing an alert which is conveniently called: - (void)show;
.
@interface UIAlertView (Blocker)
@end
#import "UIAlertView+Blocker.h"
@implementation UIAlertView (Blocker)
- (void)show {
return;
}
@end
You can find the answer here: https://stackoverflow.com/a/21698251/2377378
Upvotes: 1
Reputation: 95598
You can bind window.alert
to another function. So:
window.alert = function() {
//does nothing so effectively "disables" alert
};
Make sure you do this before you call any alerts. The neat thing about this is you can customize the way you display messages to the user. So you could override window.alert
to log to the console (for debugging purposes) or you can render it on the page (with a lightbox or something similar).
Upvotes: 13
Reputation: 3157
Add this after your web view has loaded its content
[MyWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"];
Upvotes: 19