在长按识别器结束之后,wkwebview在调用正在导航行为
我试图覆盖原来的wkwebview操作…
首先,我通过webView.evaluateJavaScript webView.evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)
禁用了原始的wkactionsheet
然后我初始化一个长按手势识别器(它完美的工作),我创build了我自己的操作表。 我用decidePolicyForNavigationAction来获取点击链接的url:
func onLongPress(gestureRecognizer:UIGestureRecognizer){ if gestureRecognizer.state == UIGestureRecognizerState.Began { longPressSwitch = true } } func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) { if(navigationAction.navigationType == .LinkActivated) { longPressAcUrl = navigationAction.request.URL!.absoluteString if(longPressSwitch == true) { let ac = actionMenu(self) self.presentViewController(ac, animated: true) { } decisionHandler(.Cancel) longPressSwitch = false } } decisionHandler(.Allow) }
问题是,手指释放后(即recognitioniser.state = .Ended),操作手册显示,但我希望它显示为Chrome,这应该在用户按下链接后0.5或更less…(即recogniser.state = .Begin),我该怎么办?
ps:这是我的行动表:
//Rebuild Wkactionsheet func actionMenu(sender: UIViewController) -> UIAlertController { let alertController = UIAlertController(title: "", message: longPressAcUrl, preferredStyle: .ActionSheet) let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in } alertController.addAction(cancelAction) let openAction = UIAlertAction(title: "Open", style: .Default) { (action) in //... } alertController.addAction(openAction) let opentabAction = UIAlertAction(title: "Open in New Tab", style: .Default) { (action) in //... } alertController.addAction(opentabAction) let copyurlAction = UIAlertAction(title: "Copy Link URL", style: .Default) { (action) in //... } alertController.addAction(copyurlAction) return alertController }
另外,如果我试图把
let ac = actionMenu(self) self.presentViewController(ac, animated: true) {}
在onLongPress(),它工作正常,虽然这不能从navigationAction.request.URL!.absoluteString获取URL(longPressAcUrl)!
首先,没有必要模仿Chrome浏览器的行为,因为对整个体验几乎没有任何影响。 事实上,人们可以通过理论来说明在手指发布之后出现的方式比Chrome和Safari所做的更好。
为什么?
因为您正在使用在整个生态系统中无处不在的标准长按识别行为。
我相信Safari正在显示操作表,而用户则迫切地想像一切正在快速发生。
无论如何,你可以通过创build一个自定义的UIWindow来“修复”这个,实现你自己的长按识别,并使用保存的坐标获取HTML的元素。 有关如何创build整个行为的指南,请查看以下链接: http : //www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/comment-page-3/
(目标C)
使用UIGestureRecognizerStateBegan
一个常见的错误:网站将绕过政策的决定,并会在触摸结束时加载内容。