在 cocoa [Objective C] 的 Web 视图中右键单击重命名默认上下文菜单标题
Rename default context menu title on right click in webview for cocoa [Objective C]
我需要在网络视图的新选项卡中打开 link。但是在右键单击时,上下文菜单显示 Open Link In New Window
和其他菜单但没有 Open Link In New Tab
。单击 Open Link In New Window
,它将在新选项卡中打开(我启用了选项卡模式)。但是我无法将标题从Open Link In New Window
更改为Open Link In New Tab
并且如果我更改标题,它将不起作用.我还找不到解决办法。我使用的是 webView,不是 WKWebView。
如果我的问题重复,请参考原文。
Objective C请..
编辑:我的代码
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
NSMutableArray *modifiedMenuItems=[[NSMutableArray alloc]init];
modifiedMenuItems=[defaultMenuItems mutableCopy];
NSMenuItem *mItem=[[NSMenuItem alloc]init];
int i=0;
while(i<[modifiedMenuItems count])
{
mItem=[modifiedMenuItems objectAtIndex:i];
if([mItem tag]==WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem];
//Here I renamed the title and replaced. But it doesn't works.
//It is showing like a disabled one.
//So I added the next line code prior to replacement.
[mItem setEnabled:YES];
}
}
return modifiedMenuItems;
}
在我的案例中,这完全是关于 return 类型的类型。我刚刚将 returning 数组从 NSMutableArray
更改为 NSArray
。我将包含更正后的代码。
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
//Here I need to rename the title of default menu from
//"Open Link In New Window" to "Open Link In New Tab".
NSMutableArray *modifiedMenuItems=[[NSMutableArray alloc]init];
modifiedMenuItems=[defaultMenuItems mutableCopy];
NSMenuItem *mItem=[[NSMenuItem alloc]init];
int i=0;
while(i<[modifiedMenuItems count])
{
mItem=[modifiedMenuItems objectAtIndex:i];
if([mItem tag]==WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem];
//Here I renamed the title and replaced. But it doesn't works.
//It is showing like a disabled one.
//So I added the next line code prior to replacement.
[mItem setEnabled:YES];
}
i++;
}
//For adding new menu item.
//[mItem setTitle:@"Your Title"];
//[mItem setTarget:self];
//[mItem setAction:@selector(yourActionMethod)];
//[mItem setTag:/*your desired enum tag value*/];
//[mItem setEnabled:YES];
//Then add or insert to any position you want in the modifiedMenuItems array.
return (NSArray *)modifiedMenuItems; //Changed the type.
}
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem]
将 mItem
替换为 mItem
。 (NSArray *)modifiedMenuItems
在运行时什么都不做。找到项目并设置标题:
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
for (NSMenuItem *mItem in defaultMenuItems)
{
if ([mItem tag] == WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
break;
}
}
return defaultMenuItems;
}
就是这样。其他问题不是重命名项目引起的。
我需要在网络视图的新选项卡中打开 link。但是在右键单击时,上下文菜单显示 Open Link In New Window
和其他菜单但没有 Open Link In New Tab
。单击 Open Link In New Window
,它将在新选项卡中打开(我启用了选项卡模式)。但是我无法将标题从Open Link In New Window
更改为Open Link In New Tab
并且如果我更改标题,它将不起作用.我还找不到解决办法。我使用的是 webView,不是 WKWebView。
如果我的问题重复,请参考原文。
Objective C请..
编辑:我的代码
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
NSMutableArray *modifiedMenuItems=[[NSMutableArray alloc]init];
modifiedMenuItems=[defaultMenuItems mutableCopy];
NSMenuItem *mItem=[[NSMenuItem alloc]init];
int i=0;
while(i<[modifiedMenuItems count])
{
mItem=[modifiedMenuItems objectAtIndex:i];
if([mItem tag]==WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem];
//Here I renamed the title and replaced. But it doesn't works.
//It is showing like a disabled one.
//So I added the next line code prior to replacement.
[mItem setEnabled:YES];
}
}
return modifiedMenuItems;
}
在我的案例中,这完全是关于 return 类型的类型。我刚刚将 returning 数组从 NSMutableArray
更改为 NSArray
。我将包含更正后的代码。
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
//Here I need to rename the title of default menu from
//"Open Link In New Window" to "Open Link In New Tab".
NSMutableArray *modifiedMenuItems=[[NSMutableArray alloc]init];
modifiedMenuItems=[defaultMenuItems mutableCopy];
NSMenuItem *mItem=[[NSMenuItem alloc]init];
int i=0;
while(i<[modifiedMenuItems count])
{
mItem=[modifiedMenuItems objectAtIndex:i];
if([mItem tag]==WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem];
//Here I renamed the title and replaced. But it doesn't works.
//It is showing like a disabled one.
//So I added the next line code prior to replacement.
[mItem setEnabled:YES];
}
i++;
}
//For adding new menu item.
//[mItem setTitle:@"Your Title"];
//[mItem setTarget:self];
//[mItem setAction:@selector(yourActionMethod)];
//[mItem setTag:/*your desired enum tag value*/];
//[mItem setEnabled:YES];
//Then add or insert to any position you want in the modifiedMenuItems array.
return (NSArray *)modifiedMenuItems; //Changed the type.
}
[modifiedMenuItems replaceObjectAtIndex:i withObject:mItem]
将 mItem
替换为 mItem
。 (NSArray *)modifiedMenuItems
在运行时什么都不做。找到项目并设置标题:
-(NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{
for (NSMenuItem *mItem in defaultMenuItems)
{
if ([mItem tag] == WebMenuItemTagOpenLinkInNewWindow)
{
[mItem setTitle:@"Open Link in New Tab"];
break;
}
}
return defaultMenuItems;
}
就是这样。其他问题不是重命名项目引起的。