如何在webview中禁用contextualMenu(自定义)?

时间:2012-06-06 16:03:11

标签: objective-c macos cocoa webview

我实现了contextMenuItemsForElement' for WebView`

 - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{

    NSMenuItem* newMenuItem = [[NSMenuItem alloc] initWithTitle:@"NewMenuItem" action:@selector(newContextualMenu:) keyEquivalent:@""];
    [newMenuItem setEnabled:YES];
    NSArray *menuItemArray =  [NSArray arrayWithObject:newMenuItem];
    return menuItemArray;
}

我尝试[newMenuItem setEnabled:NO];禁用WebView中的上下文菜单,但它无效。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

我相信WebViews中的上下文菜单会自动确定其NSMenuItems的状态,这可能是手动状态设置不起作用的原因(-setEnabled:)。

因为每次右键单击都会调用- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems,最简单的做法就是在不需要时添加NSMenuItem,但这可能不是你想要的。< / p>

我不知道如何为WebView启用manual menu enabling。您最好的选择可能是与automatic menu enabling一起利用已经存在的验证机制。

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    BOOL shouldEnable = ... 
    if ([item action] == @selector(newContextualMenu:) &&
        !shouldEnable) {
        return NO;
    }
    return [super validateMenuItem:item]; // only use if super implements
}

这将定义您的操作定义的位置,因为它会在同一位置搜索它们。