gpt4 book ai didi

objective-c - 在 WebView 中生成点击事件

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:58 25 4
gpt4 key购买 nike

我正在尝试通过 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];

不过,鼠标事件好像没有。我将不胜感激任何帮助。

最佳答案

这种方法过去对我有用:

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 事件模块 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 .

关于objective-c - 在 WebView 中生成点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com