2011-09-01 41 views
1

在MacOS X應用程序中,我創建了一個包含WebView的窗口。 WebView在包含錨點的html頁面上初始化: 轉至Google。調用javascript - 在Cocoa的WebView中單擊()Objective-C代碼

我想點擊另一個班的那個鏈接。

似乎很清楚,一個簡單的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) 

但我不能讓這行得通。 如果有人有想法,那真的會有所幫助。

回答

1

我認爲這是什麼與web視圖待辦事項,但只是你的JavaScript。

如果您在Safari的控制檯中嘗試它,它會工作嗎?我不希望它,因爲你只能點擊()輸入元素(按鈕)可靠地跨瀏覽器。 JQuery click()應該可以工作。

看到How do I programmatically click a link with javascript?

+0

我認爲你是對的。我對它進行了手工測試 - 它使用Firebug在Firefox 3中運行,但在Safair中運行 - 這是WebKit-。而在那裏,我無法讓它工作。 – RedMitch

+0

所以它取決於你期望的鏈接。如果你想關注鏈接,你可以執行javascript「location.href = link.href;」 – hooleyhoop

+0

剛剛發佈了我使用的解決方案。謝謝你的幫助。 – RedMitch

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代碼。

感謝您的幫助。