当 WebView 添加到 NSWindow 中的特定视图时,:hover 停止工作。我怎样才能解决这个问题?

Posted

技术标签:

【中文标题】当 WebView 添加到 NSWindow 中的特定视图时,:hover 停止工作。我怎样才能解决这个问题?【英文标题】:When WebView is added to a specific view in NSWindow, :hover stops working. How can I fix this? 【发布时间】:2013-06-12 03:30:09 【问题描述】:

如果我创建一个 WebView 并将其添加到 NSThemeFrame,如下所示:

让 window 成为我要添加到的 NSWindow 实例:

NSView * themeFrame = window.contentView;
[themeFrame.superview addSubview:myWebView];

然后,我加载的页面中元素的任何 :hover 标记都不再起作用。但是,:hover 确实出现在 mouseDown/mouseUp 上。所以也许这是一个刷新问题。我尝试在 mouseMoved 中调用 [myWebView setNeedsDisplay:YES]:但没有成功。

contentView 有什么特别之处吗?我用 NSView 尝试了同样的事情,并在调用 setNeedsDisplay 时覆盖了它的 mouseMoved: 方法,并且 NSView 很好地处理了 mouseMove。 :hover 有什么特别之处吗?

欢迎提出任何想法或胡言乱语!

我可能和Cocoa WebView on os X not firing mouse hover events without having to click and hold left mouse key 有同样的问题,但那里没有答案。

【问题讨论】:

这个问题有进展吗? 【参考方案1】:

我遇到了类似的问题,在调试和阅读 WebKit 的源代码后,我找到了解决方案。关键部分似乎是WebhtmlView class,特别是方法-[WebHTMLView _updateMouseoverWithEvent:]。检查视图的窗口是否是关键窗口,果然,我的窗口不是关键窗口,即使我在其上调用了makeKeyWindow

我的窗口是文档窗口的子窗口,为了解决悬停问题,我创建了一个 NSWindow 子类并像这样覆盖 isKeyWindow

- (BOOL)isKeyWindow

    return [super isKeyWindow] || [[self parentWindow] isKeyWindow];

这使得悬停在我文档的子窗口中的 WebView 中起作用。

【讨论】:

以上是关于当 WebView 添加到 NSWindow 中的特定视图时,:hover 停止工作。我怎样才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint 防止 NSWindow 调整大小

使用 NSDocument 和 NSWindow 跟踪 NSTextView 的变化

为啥添加约束会消除调整 NSWindow 大小的能力?

在使用情节提要和 swift 时从 xib 打开 NSWindow

当 Webview 重定向到 Flutter 中的另一个页面时获取 Json 响应

将 webview 添加到 sherlock 片段中