如何禁用 WebView 的上下文菜单?
Posted
技术标签:
【中文标题】如何禁用 WebView 的上下文菜单?【英文标题】:How can disable WebView's contextmenu? 【发布时间】:2011-04-07 09:15:24 【问题描述】:我想禁用 WebView 的上下文菜单“重新加载”、“打开链接”、“在新窗口中打开链接”、“下载链接”等。 我已经尝试了很长时间,这种方法与 contextMenuItemsForElement 一起使用,但无论我如何尝试都不起作用 我真的很伤心,希望有人能帮助我,我将不胜感激。
以下是我的代码:
@class WebView;
@interface UIWebView (Client)
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItem;
@end
@implementation UIWebView (Client)
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
defaultMenuItems:(NSArray *)defaultMenuItems
NSLog(@"contextMenuItemsForElement");
return nil;
@end
为什么不工作?
【问题讨论】:
您确定要在 ios 上执行此操作吗?听起来像 Mac OS api。 【参考方案1】:我认为webView:contextMenuItemsForElements:
在 iPhone SDK 中不可用(或至少公开)。
如果您可以控制 html/css 代码,则可以将此规则放入您的 css 中
a
-webkit-touch-callout: none !important;
如果不可能,请尝试
[yourWebView stringByEvaluatingjavascriptFromString:@"var a = document.getElementsByTagName('a'); for (var i = 0; i < a.length; i++) a.style.WebkitTouchCallout = 'none'; "];
在您的 webViewDidFinishLoad:
方法中。
【讨论】:
我做到了!真的太感谢了,CSS没想到有这么一个功能,但是我还是不明白为什么webView:contextMenuItemsForElements这个方法会玩不了?难道iphone不支持?只有 Mac OS X? 就是这样!我必须承认我是个菜鸟,但是英语不好,很多东西看不懂。我觉得很困惑,因为我是在developer.apple.com/library/mac/#documentation/Cocoa/Reference/…找到webView:contextMenuItemsForElements:这个方法,如果这是Mac OS API,但是为什么我可以使用webView:runJavaScriptAlertPanelWithMessage、webView:runJavaScriptConfirmPanelWithMessage等方法呢?这不是 Mac OS API 吗?以上是关于如何禁用 WebView 的上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单