在 UIWebView 和 WkWebview 中禁用 javascript 警报?
Posted
技术标签:
【中文标题】在 UIWebView 和 WkWebview 中禁用 javascript 警报?【英文标题】:Disable javascript alerts in UIWebView & WkWebview? 【发布时间】:2017-03-20 23:48:27 【问题描述】:如本例中提到的 android 示例:Disable popups and alertboxes in android webview
WebChromeClient 可用于阻止 javascript 警报。
有人可以提供一个类似的示例来阻止 ios WebViews 和 WkWebViews 中的 window.alert|window.confirm|window.prompt javascript 警报吗?
【问题讨论】:
【参考方案1】:在 wkwebview 中这是隐含的。 js 警报仅触发委托调用。警报必须由 objc/swift 代码触发
【讨论】:
嗨 Daij-Djan,你能解释一下你的答案吗?如果可能,请提供一些示例。 嗨 Daij-Djan,在这里了解一下。您是说即使 javascript 代码试图触发警报(),WkWebview 也会隐含地不显示警报?但这将由 WkWebview 托管对象以某种方式拦截并发出警报?【参考方案2】:@roshabh 是的,我刚遇到同样的问题,你必须使用 WKWebview 的 UIDelegate 方法来显示警报/符合/提示效果。 代码如:
webview?.uiDelegate = self
扩展 MessageNoticeViewController: WKUIDelegate
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void)
let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: (action) in
completionHandler()
))
present(alertController, animated: true, completion: nil)
func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void)
let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: (action) in
completionHandler(true)
))
alertController.addAction(UIAlertAction(title: NSLocalizedString("cancel", comment: ""), style: .default, handler: (action) in
completionHandler(false)
))
present(alertController, animated: true, completion: nil)
func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void)
let alertController = UIAlertController(title: nil, message: prompt, preferredStyle: .alert)
alertController.addTextField (textField) in
textField.text = defaultText
alertController.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: (action) in
if let text = alertController.textFields?.first?.text
completionHandler(text)
else
completionHandler(defaultText)
))
alertController.addAction(UIAlertAction(title: NSLocalizedString("cancel", comment: ""), style: .default, handler: (action) in
completionHandler(nil)
))
present(alertController, animated: true, completion: nil)
【讨论】:
以上是关于在 UIWebView 和 WkWebview 中禁用 javascript 警报?的主要内容,如果未能解决你的问题,请参考以下文章
禁用 UIWebView 和/或 WKWebView 中样式表的加载
在 Xamarin WKWebView 和 UIWebView 之间共享 cookie