cocoa - 当 WebView 添加到 NSWindow 中的特定 View 时,:hover stops working. 如何修复此问题?

标签 cocoa webview webkit nswindow

如果我创建一个 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 相同的问题但那里没有答案。

最佳答案

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

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

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

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

关于cocoa - 当 WebView 添加到 NSWindow 中的特定 View 时,:hover stops working. 如何修复此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057254/

相关文章:

android - ner::ERR_CACHE_MISS Android 4.4 WebView

iphone - 当我单击 XIB 文件时,Xcode 4.2 崩溃

c# - Android Xamarin 在 Android.Widget 中没有 WebView

cocoa - 禁用与 Cocoa WebView 的所有交互

javascript - Webkit 控制台是否不知道如何在 KnockOut 中使用可观察对象?

ios - 如何保护(加密)webkit/local store 存储的数据

Cocoa Webkit 错误?

objective-c - NSLog 和 DLog 的区别

objective-c - NSNotification 没有被 super 调用

cocoa - 使 NSTableView 滚动的行为类似于 UITableView 滚动