从Cocoa Objective-C代码在WebView中调用javascript-click()
在MacOS X应用程序中,我创建了一个包含WebView的窗口。 WebView在包含锚定的html页面上初始化: 去谷歌 我想点击另一个类的链接 显然,一个简单的javascript代码就可以做到这一点:从Cocoa Objective-C代码在WebView中调用javascript-click(),javascript,macos,cocoa,webkit,webview,Javascript,Macos,Cocoa,Webkit,Webview,在MacOS X应用程序中,我创建了一个包含WebView的窗口。 WebView在包含锚定的html页面上初始化: 去谷歌 我想点击另一个类的链接 显然,一个简单的javascript代码就可以做到这一点:document.getElementById(“myLink”).click() 所以,我写了一个小的objective-c代码,应该可以做到这一点: NSString *cmd = @"document.getElementById(\"myLink\").click();";
document.getElementById(“myLink”).click()代码>
所以,我写了一个小的objective-c代码,应该可以做到这一点:
NSString *cmd = @"document.getElementById(\"myLink\").click();";
id result = [[attachedWebView windowScriptObject] evaluateWebScript:cmd];
if ([result isMemberOfClass:[WebUndefined class]]) {
NSLog(@"evaluation of <%@> returned WebUndefined", cmd)
NSString*cmd=@“document.getElementById(\“myLink\”)。单击();”;
id结果=[[attachedWebView WindowsScript对象]evaluateWebScript:cmd];
if([result isMemberOfClass:[WebUndefined class]]){
NSLog(@“对返回的WebUndefined的评估”,cmd)
但我不能让它工作。
如果有人有想法,那真的会很有帮助。我认为webview没有什么可做的,只有javascript
如果您在Safari的控制台中尝试它,它会工作吗?我不希望这样,因为您只能在浏览器中可靠地单击()输入元素(按钮)。JQuery click()应该可以工作
请参见,以下是我使用的解决方案
创建了一个文件:WebAgent.js,其中包含以下代码:
function myClick(id) {
var fireOnThis = document.getElementById(id);
var evObj = document.createEvent('MouseEvents');
evObj.initEvent( 'click', true, true );
fireOnThis.dispatchEvent(evObj);
}
下面是我的objective-c类中的代码
// load cmd.js
NSString *path = @"/code/testagent/WebAgent/WebAgent/WebAgent.js";
NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[[self attachedWebView ]stringByEvaluatingJavaScriptFromString:jsCode];
//do the click
NSString * anchorId = @"myId";
NSString *call = [NSString stringWithFormat:@"WebAgent_click('%@')",anchorId];
[[self attachedWebView] stringByEvaluatingJavaScriptFromString:call];
NB:我使用此解决方案在特定文件中包含JS代码,因为我希望将来会有更多JS代码
谢谢你的帮助。我认为你是对的。我手动测试了它——它在Firefox 3中使用Firebug工作,但在Safair(即WebKit)中没有。在那里,我无法使它工作。因此这取决于你希望链接做什么。如果你想跟随链接,你可以执行javascript“location.href=link.href;”刚刚发布了我使用的解决方案。谢谢你的帮助。