【发布时间】:2011-03-24 22:43:16
【问题描述】:
我正在使用UIWebView 加载网址。
在该 URL 的页面内,它使用 alert("whatever msg") 作为 JavaScript。我的UIWebView 将弹出一个窗口并显示该警报消息。
有没有办法禁用这种弹出窗口或 JavaScript 警告窗口?
【问题讨论】:
标签: javascript ios uiwebview
我正在使用UIWebView 加载网址。
在该 URL 的页面内,它使用 alert("whatever msg") 作为 JavaScript。我的UIWebView 将弹出一个窗口并显示该警报消息。
有没有办法禁用这种弹出窗口或 JavaScript 警告窗口?
【问题讨论】:
标签: javascript ios uiwebview
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)
【讨论】:
由于 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
【讨论】:
您可以将window.alert 绑定到另一个函数。所以:
window.alert = function() {
//does nothing so effectively "disables" alert
};
确保在调用任何警报之前执行此操作。这样做的好处是您可以自定义向用户显示消息的方式。因此,您可以覆盖 window.alert 以登录到控制台(出于调试目的),或者您可以在页面上呈现它(使用灯箱或类似的东西)。
【讨论】:
var a = null; a(); 是一个 JavaScript 运行时错误。
在您的 Web 视图加载其内容后添加它
[MyWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"];
【讨论】: