2011-10-10 29 views
7

我希望能夠爲我的應用程序使用PhoneGap。我將不得不構建自定義協議/插件,以便可以從Javascript調用Native方法。我知道你可以在本地代碼返回時在Javascript中調用成功函數。你可以使用PhoneGap和iOS從本機代碼(不是在回調中)調用JavaScript函數嗎?

我需要做的就是從本地代碼中調用一個javascript函數。基本上,應用程序將通過本地網絡連接到OSX伴侶應用程序,當OSX應用程序將數據發送到iOS應用程序時,它將在Objective C方法中處理,我需要能夠將結果發送到PhoneGap/javascript並執行某些操作與它在WebView中。

這可能嗎?我只能找到有關從JavaScript調用native的信息,而不是其他方式。

感謝, 托馬斯

從答案使用下面的代碼在這裏:

MyPhoneGapPlugin.m

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { 
    NSLog(@"Connected To %@:%i.", host, port); 

    NSString* jsString = [NSString stringWithFormat:@"alert(connected to: %@);", host]; 
    [theWebView stringByEvaluatingJavaScriptFromString:jsString]; 

    [self readWithTag:2]; 
} 

給我錯誤「未知的接收器 'theWebView' 你的意思是 '一個UIWebView' ?

UPDATE:找到了答案:使用PhoneGap的幫手,我可以寫這樣的事情...

[super writeJavascript:@"alert('connected');"]; 

回答

4

找到了PhoneGap的幫手來完成這個...用編寫JavaScript web視圖:

[super writeJavascript:@"alert('it works');"]; 
+0

請您詳細說明您的答案。我有同樣的問題,對科爾多瓦來說是新的。我從MainViewController和我的Phonegap插件中調用它,但它在webview中沒有響應。他們失去了什麼? – bhuwansahni

+0

@bhuwansahni恐怕科爾多瓦可能改變了很多,因爲我這樣做,所以我不太確定現在需要什麼。我可以像從我的應用程序中的任何方法那樣調用它 - 可以參閱文檔中的這篇文章以獲取更多信息:http://docs.phonegap.com/en/2.0.0/guide_plugin-development_ios_index.md。 HTML – tsdexter

0

將這項工作的嗎?

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html

從該頁面摘自:

您也可以調用JavaScript函數與參數。假設您已經編寫了一個如下所示的JavaScript函數:

function addImage(image, width, height) { ... } 

其目的是向網頁添加圖像。它被稱爲三個參數:圖像,圖像的URL;寬度,圖像的屏幕寬度;和高度,圖像的屏幕高度。您可以從Objective-C中以兩種方式調用此方法。第一次使用WebScriptObject橋之前創建的參數數組:

id win = [webView windowScriptObject]; 



NSArray *args = [NSArray arrayWithObjects: 
       @"sample_graphic.jpg", 
       [NSNumber numberWithInt:320], 
       [NSNumber numberWithInt:240], 
        nil]; 

[win callWebScriptMethod:@"addImage" 
      withArguments:args]; 
+0

不幸的是,這是OSX專用的,和OP使用的PhoneGap和iOS。 – darvids0n

+0

是的,我需要iOS應用程序的這個功能,而不是Mac OSX Companion應用程序。謝謝你。 – tsdexter

10

您可以輕鬆地調用JavaScript從本地代碼與UIWebView

[webView stringByEvaluatingJavaScriptFromString:@"myJSFunction()"]; 

在某處使用函數的結果作爲ARG的JS功能:

NSString *stringData = getStringData(); // however you get it 
[webView stringByEvaluatingJavaScriptFromString: 
[NSString stringWithFormat:@"myJSFunction(%@)", stringData]]; 
+0

真棒這應該爲我工作。我甚至沒有想過要使用UIWebView類,我太專注於PhoneGap API了。非常感謝! – tsdexter

+0

必須等待4分鐘才能接受... – tsdexter

+0

感謝您的更新。這可能是我的下一個問題。 – tsdexter

1

你應該試試這個,

[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"]; 
相關問題