2010-11-15 26 views
2

我正在開發一個正在顯示在UIWebView中的Web應用程序。該應用程序在本地加載,即不從Web服務器加載。我通過UIWebViewDelegate協議中的shouldStartLoadWithRequest:方法從Javascript向ObjC進行通信。在Objective-C的iOS Web應用程序中調用Javascript

我需要的最後一件事就是能夠在沒有任何頁面重新加載的情況下從ObjC調用Javascript函數。我希望這是可能的。

回答

8

好吧,你可以叫

-[UIWebView stringByEvaluatingJavaScriptFromString:]

,只要你喜歡,不只是響應委託方法。

[self.myWebView stringByEvaluatingJavaScriptFromString:@"myJavaScriptFunction(123.0)"]; 

你不需要重新加載web視圖發送這樣的信息:

+0

OMG我知道這已經。哈,這裏真的很晚,我因爲不得不從頭開始項目而徹底忘記了而感到恐慌。謝謝。我現在可以上牀休息了。 – 2010-11-15 02:55:15

1

便無法你只是做一個「的loadRequest」,並與內容傳遞一個NSURL喜歡像這樣做:

javascript:myFunction("MyParameter"); 

應該調用你的函數,而不是重新加載頁面。

4

您可以通過簡單地使用stringByEvaluatingJavaScriptFromString方法對你的WebView加載了網頁視圖後,撥打您的WebView任何JavaScript函數(在完成之前不要發佈webview)。

0

可以使用JavaScriptCore框架從Objective-C運行JavaScript代碼。

#import <JavaScriptCore/JavaScriptCore.h> 

... 

JSContext *context = [[JSContext alloc] init]; 
[context evaluateScript: @"function greet(name){ return 'Hello, ' + name; }"]; 
JSValue *function = context[@"greet"]; 
JSValue* result = [function callWithArguments:@[@"World"]]; 
[result toString]; // -> Hello, World 

這裏是一個演示:

https://github.com/evgenyneu/ios-javascriptcore-demo

相關問題