正在阻止UIWebView警报

Blocking UIWebView alerts

本文关键字:UIWebView 警报      更新时间:2023-09-26

我有一个应用程序,可以从各种域打开网页。其中一些域嵌入了显示You're the 1 millionth visitor to this website. You won >>nothing<<"等警报的脚本。

我决定劫持window.alert方法调用,不采取任何措施,这样上述网站就不会显示恶意警报。

我屏蔽了- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType- (void)webViewDidFinishLoad:(UIWebView *)webView中的警报,以防止网站在页面加载完成之前显示警报。

一些崩溃报告表明,从shouldStartLoadWithRequest调用webView stringByEvaluatingJavaScriptFromString:...会导致应用程序崩溃。不总是,只是有时。知道为什么会这样吗?

有没有一种方法可以在不进行手动劫持的情况下从一开始就防止警报显示?我很想使用SFSafariViewController,但不幸的是,对于各种限制,这不是一个选项。

为什么不使用WKWebView?WKWebView挂接JS的警报,默认情况下不执行任何操作。

FYI:

如果您想在调用JS的警报时显示警报,请实现WKUIDelegate的

webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: () -> Void) 

并显示自己的对话。