从Cocoa Objective-C代码调用javascript - 在WebView中单击()

时间:2011-09-01 10:27:24

标签: javascript macos cocoa webkit webview

在MacOS X应用程序中,我创建了一个包含WebView的窗口。 WebView在包含锚点的html页面上初始化: 转到谷歌。

我想点击其他课程的链接。

很明显,简单的javascript代码可以解决这个问题: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)

但我不能让它发挥作用。 如果有人有想法,那确实会有所帮助。

2 个答案:

答案 0 :(得分:1)

我认为这与webview无关,只是你的javascript。

如果你在Safari的控制台中试用它会有用吗?我不指望它,因为你只能可靠地跨浏览器点击()输入元素(按钮)。一个JQuery click()应该可以工作。

请参阅How do I programmatically click a link with javascript?

答案 1 :(得分:1)

所以这是我使用的解决方案。

创建了一个文件: 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代码。

感谢您的帮助。