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

时间:2013-06-12 03:30:09

标签: cocoa webview webkit nswindow

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

让window成为我正在添加的NSWindow实例:

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

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

contentView有什么特别之处吗?我尝试使用NSView进行相同的操作并覆盖其mouseMoved:方法,同时调用setNeedsDisplay并且NSView处理了mouseMove。有什么特别的东西:悬停?

欢迎任何想法或谣言!

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

1 个答案:

答案 0 :(得分:1)

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

我的窗口是文档窗口的子窗口,为了解决悬停问题,我创建了一个NSWindow子类并覆盖isKeyWindow,如下所示:

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

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