17

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?

4 Answers 4

19

Add this after your web view has loaded its content

[MyWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"];
Sign up to request clarification or add additional context in comments.

3 Comments

Very helpful, it is working. I have mention that I have to put this message in webViewDidStartLoad delegate method, just for other people who may want to know
This did not work for me since the JS that shows the alert was executed before the rendering of the page completed. I ended up blocking it on the native level: stackoverflow.com/a/21698251/154915
Even put it in webViewDidStartLoad does not work, either
13

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).

2 Comments

No problem. pop850's answer is probably what you want to accept since it addresses your concern directly.
From my point of view this answer addresses the issue more gracefully, as var a = null; a(); is a JavaScript runtime error.
1

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

Comments

1
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)

1 Comment

This code saved my life using React Native Webview, i tryied everything and nothing worked.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.