在 IOS 9 中,javascript 警报和确认弹出窗口不适用于 Webkit

Posted

技术标签:

【中文标题】在 IOS 9 中,javascript 警报和确认弹出窗口不适用于 Webkit【英文标题】:javascript alert and confirm popups not working with Webkit in IOS 9 【发布时间】:2016-08-13 10:09:28 【问题描述】:

javascript 弹出窗口不适用于 WebKit。

在 Safari(在 OSX 上)中,此文档将创建预期的警报并确认弹出窗口。但是在 ios 模拟器或设备上运行我的 WebKit 实例时,不会显示弹出窗口,并且确认函数返回 false。

<!DOCTYPE html>
<html>
<body>

    <p id="check3"></p>

    <script>
        alert("alert 1");

        function check3() 
            return(confirm("Confirm?"));
        
    </script>

    <button type="button"
        onclick="document.getElementById('check3').innerHTML = check3()">
        Check 3</button>

</body>
</html>

我正在使用 Xcode 7.3,为 IOS 9.3 编译。 info.plist"AppTransportSecurity""Allow arbitrary HTML"

这是我在其中实例化 Web 视图的代码视图控制器代码:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate 

  @IBOutlet weak var wv: UIView!

  var webView : WKWebView?

  override func viewDidAppear(animated: Bool) 
    super.viewDidAppear(true)

    let webViewCfg = WKWebViewConfiguration()
    webViewCfg.preferences.javaScriptEnabled = true;
    webViewCfg.preferences.javaScriptCanOpenWindowsAutomatically = true
    webView = WKWebView.init(frame:wv.bounds, configuration: webViewCfg)

    self.wv.addSubview(webView!)

    webView!.navigationDelegate = self

    let path = getBundlePath("js1.html")
    let targetFileURL = NSURL(fileURLWithPath: path!, isDirectory: false)
    webView!.loadFileURL(targetFileURL, allowingReadAccessToURL: targetFileURL)

  

【问题讨论】:

请这个:***.com/a/27067168/5109911 我为你写了swift版 非常感谢您。我花了很长时间寻找答案,但由于某种原因从未找到其他答案。非常感谢 swift 版本。 如果我的回答对你有用,请标记为正确,我将不胜感激,谢谢:) 完成。再次感谢您的帮助。 【参考方案1】:

来自answer

您必须是 webview 委托:

// MARK: WKUIDelegate methods
func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: (() -> Void)) 
    print("webView:\(webView) runJavaScriptAlertPanelWithMessage:\(message) initiatedByFrame:\(frame) completionHandler:\(completionHandler)")

    let alertController = UIAlertController(title: frame.request.URL?.host, message: message, preferredStyle: .Alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler:  action in
            completionHandler()
    ))
    self.presentViewController(alertController, animated: true, completion: nil)

【讨论】:

以上是关于在 IOS 9 中,javascript 警报和确认弹出窗口不适用于 Webkit的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 全屏 Web 应用程序中的 JavaScript 警报损坏?

如何在后台应用程序时从 JavaScript 发出通知/警报 - PhoneGap iPhone/iOS

Javascript 警报弹出在 IOS 中无法用于 phonegap

Xamarin iOS WKWebView 显示 JavaScript 警报

在应用程序购买警报显示时,iOS 9 的 XPC 连接中断

iOS WKWebView javascript警报在ipad上崩溃