2012-02-04 69 views
16

在我正在开发的iOS应用中,我显示一个UIWebView以允许用户升级其帐户。该页面包含的链接,以显示该用户的其他信息,但你按住链接在你的手指,像这样的菜单会弹出: enter image description here防止iOS Webkit长按链接

正如你所看到的,它揭示了页面的URL和的行动,将被执行,我不希望用户看到,因为我不希望他们能够复制任何东西,因为我已禁用“复制/剪切/粘贴”菜单。我怎么去关闭这个菜单呢?

感谢您的指点。

+0

有没有什么好的理由可以阻止用户这样做?对我来说似乎没有麻烦会更容易。 – millimoose 2012-02-04 22:21:33

回答

32

我想你可以通过在链接上设置the CSS -webkit-touch-callout propertynone来禁用该弹出窗口。你可以通过编辑你正在加载的HTML或CSS文件来完成,而不是使用Objective-C。

16

你想要做什么,如Rob已经说明,是要禁用UIWebView的默认上下文菜单。您可以通过添加以下行来webViewDidFinishLoad:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"]; 
13

如果你想都禁止弹出文本的用户选择你的整个HTML页,使用你的网页的BODY实现它或全球CSS。

body { 
-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 
} 
+0

这起作用。但是,如果您担心用户更改CSS,请使用[其他答案](http://stackoverflow.com/a/15538022/642706)建议的编程方法。并搜索相关/重复的问题和答案。 – 2014-11-15 06:16:23

+3

您可以使用'* {'而不是'body {'来覆盖所有内容。 – 2014-11-15 06:17:22

+2

如果你想让你的输入和textareas工作,你需要使用'*:not(input,textarea){}'' – 2015-08-06 19:14:55

0

没有必要告诉你有一个链接的浏览器,然后迫使它不会表现得像一个!

只需完全删除href="void(0)"

您的ontouchendonclick属性仍将工作


如果你想正常的蓝色/下划线再看看,您可以添加这个CSS:

a .originalLink { color: blue; text-decoration: underline; cursor: pointer; } 

这样可以节省大量的CPU周期,尤其是当有几百个链接的网页,而用户是平滑滚动。

您也可以使用此此扩展到正规网址:

<a class="originalLink" onclick="location.href='http://mylink';">Real URL Link</a> 

当然你的SEO是窗外,但对于一个特定移动网络应用程序的情况这可能是至关重要的。

快乐编码!