如何禁用 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 的上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 TWebBrowser 上下文菜单?

Android webview中图像保存的上下文菜单

如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单

VBA:如何从右键单击上下文菜单中禁用某些选项

WindowChrome - 如何修改或禁用标题栏中的上下文菜单?

如何在 Chrome 的信息亭模式下禁用右键单击/长按的上下文菜单?