在WKWebView中禁用鼠标单击和鼠标悬停

时间:2020-07-27 14:18:43

标签: objective-c xcode macos wkwebview nsview

我是新来的,请忍受我。在MacOS(不是iOS)上使用WKWebView / NSView / NSWindow的Xcode嵌入youtube视频:

@property (assign) IBOutlet NSView *webNSView;
@property (assign) IBOutlet WKWebView *webView;

- (void)windowDidLoad {
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.webNSView.frame];
webView.navigationDelegate = self;
NSURL *nsurl=[NSURL URLWithString:@"https://www.youtube.com/embed/C0DPdy98e4c"];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.webNSView addSubview:webView]; }

如何禁用窗口中的所有鼠标交互,以使用户无法与视频交互或在WKWebView中初始化鼠标悬停。所以我想禁用鼠标单击和窗口/视图上的鼠标悬停操作。我在youtube上尝试了各种嵌入选项,但我认为需要在窗口/视图上完成。

1 个答案:

答案 0 :(得分:1)

如果您真正想要的是禁用与窗口的所有交互,则可以将ignoresMouseEvent属性设置为YES。您可以通过NSWindowNSWindowController子类来完成此操作:

@interface MyWindowController : NSWindowController
@end

@implementation MyWindowController

- (void)windowDidLoad {
    self.window.ignoresMouseEvents = YES;
}

@end

请注意,这确实会禁用所有鼠标与窗口(包括标题栏)的交互。通常,您需要少一点侵略性的东西。

一种替代方法是将WKWebView子类化,并覆盖从NSResponder类继承的鼠标事件处理方法。

@interface MyWebView : WKWebView
@end

@implementation MyWebView

- (void)mouseUp:(NSEvent *)event {}
- (void)mouseDown:(NSEvent *)event {}
- (void)mouseMoved:(NSEvent *)event {}
- (void)mouseEntered:(NSEvent *)event {}
- (void)mouseExited:(NSEvent *)event {}

@end

这些事件将被吞噬,并且不会通过事件处理机制传播。