問題1
h5調用alert()方法,客戶端不彈出alert
解決方法:
lazy var webView: XTWebView = {
let temp = XTWebView.init(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: SCREEN_HEIGHT - 64), configuration: self.config)
temp.navigationDelegate = self
temp.allowsBackForwardNavigationGestures = true
temp.uiDelegate = self
return temp
}()
extension NNWebViewController: WKUIDelegate {
//Alert彈框
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alert = UIAlertController(title: message, message: nil, preferredStyle: UIAlertControllerStyle.alert)
let action = UIAlertAction(title: "好的", style: UIAlertActionStyle.cancel) { (_) in
completionHandler()
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
//confirm彈框
func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
let alert = UIAlertController(title: message, message: nil, preferredStyle: UIAlertControllerStyle.alert)
let action = UIAlertAction(title: "確定", style: UIAlertActionStyle.default) { (_) in
completionHandler(true)
}
let cancelAction = UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel) { (_) in
completionHandler(false)
}
alert.addAction(action)
alert.addAction(cancelAction)
present(alert, animated: true, completion: nil)
}
//TextInput彈框
func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {
let alert = UIAlertController(title: "", message: nil, preferredStyle: UIAlertControllerStyle.alert)
alert.addTextField { (_) in}
let action = UIAlertAction(title: "確定", style: UIAlertActionStyle.default) { (_) in
completionHandler(alert.textFields?.last?.text)
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
}
問題2
h5頁面中不能彈出menuItem,即不能進行文字的復制搜索等功能。
此問題出現在6s及以上機型中,原因為與3DTouch功能沖突
解決方法:
在控制器中添加以下代碼:
override var traitCollection: UITraitCollection {
if #available(iOS 9.0, *) {
return UITraitCollection.init(forceTouchCapability: .unavailable)
} else {
return UITraitCollection.init()
}
}