UIWebView: можно ли отключить javascript alert() на любой веб-странице?

Я использую UIWebView для загрузки URL-адреса.

Внутри страницы этого URL-адреса он использует alert("whatever msg") как JavaScript. Мой UIWebView откроет окно и покажет это предупреждающее сообщение.

Есть ли способ отключить это всплывающее окно или окно предупреждения JavaScript?

Ответы

Ответ 1

Добавьте это после того, как ваш веб-просмотр загрузил его содержимое

[MyWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"];

Ответ 2

Вы можете привязать window.alert к другой функции. Итак:

window.alert = function() {
  //does nothing so effectively "disables" alert
};

Убедитесь, что вы делаете это, прежде чем вы вызываете какие-либо предупреждения. Оптимальная вещь об этом заключается в том, что вы можете настроить способ отображения сообщений пользователю. Таким образом, вы можете переопределить window.alert для входа в консоль (для целей отладки) или вы можете отобразить ее на странице (с помощью лайтбокса или чего-то подобного).

Ответ 3

Так как a UIWebView переводит все предупреждения Javascript в native UIAlertViews, довольно просто заблокировать его на родном конце. В UIAlertView.h существует только один общедоступный метод для отображения предупреждения, которое удобно назвать: - (void)show;.

@interface UIAlertView (Blocker)
@end

#import "UIAlertView+Blocker.h"

@implementation UIAlertView (Blocker)

- (void)show {
   return;
}
@end

Здесь вы можете найти ответ: fooobar.com/questions/340223/...

Ответ 4

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)