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

Disable Mouse Click and Mouse Over in WKWebView

我是新人,多多包涵。 Xcode 在 MacOS 上(不是 iOS)使用 WKWebView / NSView /NSWindow 嵌入 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]; }

如何在 window 中禁用所有鼠标交互,以便用户无法与视频交互或在 WKWebView 中初始化鼠标悬停。所以我希望在 window / 视图上禁用鼠标单击和鼠标悬停操作。我已经在 youtube 上尝试了各种嵌入选项,但我认为它需要在 window/view.

上完成

如果您真正想要禁用与 window 的所有交互,您可以将 ignoresMouseEvent 属性 设置为 YES。您可以通过 NSWindowNSWindowController subclass:

@interface MyWindowController : NSWindowController
@end

@implementation MyWindowController

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

@end

请注意,这实际上会禁用所有鼠标与 window 的交互,包括标题栏。你通常想要一些不那么激进的东西。

另一种方法是子class WKWebView 并覆盖从 NSResponder class.

继承的鼠标事件处理方法
@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

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