Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Cocoa Objective-C代码在WebView中调用javascript-click()_Javascript_Macos_Cocoa_Webkit_Webview - Fatal编程技术网

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

从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();";

在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)
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;”刚刚发布了我使用的解决方案。谢谢你的帮助。