开发者

How can disable WebView's contextmenu?

I want to disable WebView's contextmenu "Reload", "Open Link", "Open Link in new Window", "Download link" etc.. I've tried a really long time, this method with contextMenuItemsForElement, but no matter how I try do not work I really feel very sad, I hope someone can help me, I would be very grateful.

The following is my code:

@class WebView;
@interface UIWebView (Client)
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItem;
@end

@implementation UIWebV开发者_StackOverflow中文版iew (Client)
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element 
    defaultMenuItems:(NSArray *)defaultMenuItems
{
    NSLog(@"contextMenuItemsForElement");
    return nil;
}

@end

Why are not working?


I don't think webView:contextMenuItemsForElements: is available in the iPhone SDK (or at least publicly).

If you have control over the html/css code, you can put this rule in your css

a {
    -webkit-touch-callout: none !important;
}

and if it isn't possible, try

[yourWebView stringByEvaluatingJavascriptFromString:@"var a = document.getElementsByTagName('a'); for (var i = 0; i < a.length; i++) { a.style.WebkitTouchCallout = 'none'; }"];

in your webViewDidFinishLoad: method.


Here is a solution to disable long press context menu using UIKit Overrides for menu building and validation. Add this in your ViewController.m file

-(void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder {
    NSLog(@"%@", builder);
    [builder removeMenuForIdentifier:UIMenuLookup];
    [builder removeMenuForIdentifier:UIMenuShare];
    [builder removeMenuForIdentifier:UIMenuStandardEdit];
}

Note: import UIKit #import <UIKit/UIKit.h>

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜