UIWebView:我可以在任何网页中禁用javascript alert()吗?

时间:2010-08-03 20:14:55

标签: javascript ios uiwebview

我正在使用UIWebView加载网址。

在该网址的页面中,它使用alert("whatever msg")作为JavaScript。我的UIWebView会弹出一个窗口并显示该警告信息。

有没有办法禁用这种弹出窗口或JavaScript警报窗口?

4 个答案:

答案 0 :(得分:19)

在您的网络视图加载其内容后添加此内容

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

答案 1 :(得分:12)

您可以将window.alert绑定到另一个函数。所以:

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

确保在拨打任何提醒之前执行此操作。关于这一点的好处是你可以自定义向用户显示消息的方式。因此,您可以覆盖window.alert以登录控制台(用于调试目的),或者您可以在页面上呈现它(使用灯箱或类似的东西)。

答案 2 :(得分:1)

由于UIWebView将所有Javascript警报转换为本机UIAlertViews,因此在本机端阻止它是相当简单的。查看UIAlertView.h,只有一种公开方法可以显示一个方便的名为- (void)show;的警报。

@interface UIAlertView (Blocker)
@end

#import "UIAlertView+Blocker.h"

@implementation UIAlertView (Blocker)

- (void)show {
   return;
}
@end

您可以在此处找到答案:https://stackoverflow.com/a/21698251/2377378

答案 3 :(得分:0)

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)