我认为这应该很简单,但我不能让它发挥作用。
我想检测WebView上的鼠标点击次数
我已经将WebView子类化了,这里是代码
#import <AppKit/AppKit.h>
#import <Foundation/Foundation.h>
#import <WebKit/WebKit.h>
@interface ResultsWebView : WebView {
}
@end
和
#import "ResultsWebView.h"
@implementation ResultsWebView
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"%@", theEvent);
}
@end
在我的xib文件中,我添加了一个WebView,然后将该类更改为ResultsWebView。
我在运行时检查过,对象是ResultsWebView,但是从不调用mouseDown事件......
我错过了什么?
答案 0 :(得分:5)
WebUIDelegate开始拯救。
假设您在NSWindowController中有一个WebView实例:
WebView *aWebView;
您可以将控制器设置为UIDelegate,如下所示:
[aWebView setUIDelegate:self];
在您的控制器中实现以下方法,您将拥有一种控制鼠标单击事件的形式:
- (void)webView:(WebView *)sender mouseDidMoveOverElement:
(NSDictionary *)elementInformation modifierFlags:(NSUInteger)
modifierFlags
{
if ([[NSApp currentEvent] type] == NSLeftMouseUp)
NSLog(@"mouseDown event occurred");
}
作为奖励,使用elementInformation字典,您可以获得有关发生点击事件的DOM元素的其他信息。
答案 1 :(得分:3)
问题是邮件未发送到WebView。相反,它被发送到WebView中的私有WebHTMLView,它实际上处理鼠标事件。
http://trac.webkit.org/browser/trunk/Source/WebKit/mac/WebView/WebHTMLView.mm#L3555
您可能只想在WebView中使用javascript将onmousedown事件发送回Objective-c类。
答案 2 :(得分:-2)
也许这会有所帮助:
[window setAcceptsMouseMovedEvents:YES];