4

如果我创建一个 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 有什么特别之处吗?

欢迎任何想法或漫谈!

我可能会遇到与 os X 上的 Cocoa WebView 相同的问题,而无需单击并按住鼠标左键就不会触发鼠标悬停事件,但那里没有答案。

4

1 回答 1

1

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

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

- (BOOL)isKeyWindow
{
    return [super isKeyWindow] || [[self parentWindow] isKeyWindow];
}

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

于 2016-02-18T09:49:33.753 回答