- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图覆盖原始的 wkwebview 操作表...
首先,我通过 webView.evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)
然后我初始化了一个长按手势识别器(它完美地工作)并且我创建了我自己的操作表。我使用 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/
我在我的应用程序中使用 UIWebView,在 iOS5 和 6 中一切正常。但是在 iOS7 上,UIWebView 无法加载请求的页面(来自互联网的 html)并且每 10 秒开始一个无限循环并出
我试图覆盖原始的 wkwebview 操作表... 首先,我通过 webView.evaluateJavaScript("document.body.style.webkitTouchCallout=
我正在开发一个在 Swift 中使用 WKWebView 显示网页的应用程序。我需要禁用用户选择和标注(因为 Web 会加载图表),但我找不到任何方法来使用 WKWebView 来执行此操作。 我正在
我试图禁用 wkWebView 内的链接加载,因此我为此使用了 decidePolicyForNavigationAction,但我的应用程序给我这个错误: Terminating app due t
我在我们的一个 iOS 应用测试中遇到了问题。非常感谢任何解决问题的帮助! 测试代码: func testOpenExternalBrowser_for_valid_urls() {
我实现了一个 WebPolicyDelegate 和 ...decidePolicyForNavigationAction:... 方法。 它工作正常,除其他外,我还得到了 HTTP 方法 [GET|
我正在使用以下代码在我的 web View 中加载 url,但它被调用多次并且我的应用程序崩溃了。 - (void)webView:(WebView *)webView decidePolicyFor
大家好, 我想在调用以下方法时加载一个新页面....我正在使用以下代码.. (void)webView:(WebView *)webView decidePolicyForNavigationActi
我在不断加载 webview 的同时加载正在运行的图像(横幅)我的 webview 。但有时我会收到警告 void SendDelegateMessage(NSInvocation*): delega
我正在使用委托(delegate)方法 shouldStartLoadWithRequest 来捕获链接点击并处理我的应用程序内的特定情况,而不是让 webView 导航到链接。在这段代码中,我试图将
我是一名优秀的程序员,十分优秀!