gpt4 book ai didi

ios - 长按识别器结束后调用 wkwebview decidePolicyForNavigationAction

转载 作者:可可西里 更新时间:2023-10-31 23:44:14 25 4
gpt4 key购买 nike

我试图覆盖原始的 wkwebview 操作表...

首先,我通过 webView.evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)

禁用了原始的 wkactionsheet

然后我初始化了一个长按手势识别器(它完美地工作)并且我创建了我自己的操作表。我使用 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)
}

问题是,操作表在手指松开后显示(即 recogniser.state = .Ended),但我希望它像 Chrome 一样显示,这应该在用户按下链接后 0.5 秒或更短的时间内显示。 ..(即 recogniser.state = .Begin),我能做什么?

ps:这是我的 Action 表:

//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 会在用户按下时显示操作表,以产生一切都在快速发生的错觉。

无论如何,您可以通过创建自定义 UIWindow、实现您自己的长按识别并使用保存的坐标获取 HTML 元素来“修复”此问题。有关如何创建整个行为的指南,请查看此链接:http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/comment-page-3/

( objective-C )

使用 UIGestureRecognizerStateBegan

一般错误:网站将绕过策略决定并在触摸结束时加载内容。

关于ios - 长按识别器结束后调用 wkwebview decidePolicyForNavigationAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35499976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com