在长按识别器结束之后,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

一个常见的错误:网站将绕过政策的决定,并会在触摸结束时加载内容。