【问题标题】:Call javascript - click() in a WebView from Cocoa Objective-C code在 Cocoa Objective-C 代码的 WebView 中调用 javascript - click()
【发布时间】:2011-09-01 10:27:23
【问题描述】:

在 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)

但我不能让它工作。 如果有人有想法,那真的很有帮助。

【问题讨论】:

    标签: javascript macos cocoa webkit webview


    【解决方案1】:

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

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

    How do I programmatically click a link with javascript?

    【讨论】:

    • 我认为你是对的。我手动测试了它——它在使用 Firebug 的 Firefox 3 中工作,但在 Safair 中却没有——它是 WebKit-。在那里,我无法让它工作。
    • 所以这取决于你期望链接做什么。如果你想跟随链接,你可以执行 javascript "location.href = link.href;"
    • 刚刚发布了我使用的解决方案。感谢您的帮助。
    【解决方案2】:

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

    创建了一个文件: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];
    

    注意:我使用此解决方案将 JS 代码放在特定文件中,因为我预计将来会有更多 JS 代码。

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2010-12-08
      • 1970-01-01
      • 2011-06-20
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多