我正在尝试通过Mac上的菜单项在特定DOMNode上生成点击事件。我认为这很简单,但我似乎遇到了障碍,不知道我哪里出错了。
DOMDocument* domDocument=[webView mainFrameDocument];
DOMEvent* event = [domDocument createEvent:@"HTMLEvents"];
[event initEvent:@"click" canBubbleArg:YES cancelableArg:NO];
[[[domDocument getElementsByClassName:@"logout clickable"] item:0] dispatchEvent:event];
DOMEvent似乎缺少一些我原本希望看到的方法。我原本希望像这样编码。
DOMEvent* event = [domDocument createEvent:@"MouseEvents"];
[event initMouseEvent:@"click" canBubbleArg:YES cancelableArg:NO];
但是,鼠标事件似乎不可用。我将不胜感激任何帮助。
答案 0 :(得分:4)
这种方法过去对我有用:
DOMElement *el = // find element somehow
DOMDocument *doc = [el ownerDocument];
DOMAbstractView *window = [doc defaultView];
DOMUIEvent *evt = (DOMUIEvent *)[doc createEvent:@"UIEvents"];
[evt initUIEvent:@"click" canBubble:YES cancelable:YES view:window detail:1];
[el dispatchEvent:evt];
我相信这是所有标准的DOM2 Events模块API。我想通过查看MozDev createEvent
article上的JavaScript找到了这个解决方案。
另请注意WebKit的 DOMHTMLElement.h 中的-[DOMHTMLElement click]
方法,该方法标记为AVAILABLE_AFTER_WEBKIT_VERSION_5_1
。
最后,我偶尔不得不求助于一些hackier来完全模拟用户“鼠标点击”以及通常伴随它的所有DOM事件。我只会尝试这个,如果上面没有其他工作(这是复杂,丑陋和脆弱):
WebView *webView = // get web view
DOMElement *el = // find element somehow
id relatedTarget = [(DOMHTMLDocument *)[el ownerDocument] body];
[el dispatchMouseEventType:@"mouseover" clickCount:0 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:relatedTarget webView:webView];
[el dispatchMouseEventType:@"mousemove" clickCount:0 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:nil webView:webView];
[el dispatchMouseEventType:@"mousedown" clickCount:1 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:nil webView:webView];
[el dispatchMouseEventType:@"click" clickCount:1 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:nil webView:webView];
[el dispatchMouseEventType:@"mouseup" clickCount:1 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:nil webView:webView];
[el dispatchMouseEventType:@"mousemove" clickCount:0 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:nil webView:webView];
[el dispatchMouseEventType:@"mouseout" clickCount:0 ctrlKey:NO altKey:NO shiftKey:NO metaKey:NO button:0 relatedTarget:relatedTarget webView:webView];
我的开源项目TDAppKit on Google Code中有很多这样的代码。