2011-10-10 18 views
7

Tôi hy vọng có thể sử dụng PhoneGap cho ứng dụng của mình. Tôi sẽ phải xây dựng một giao thức/plugin tùy chỉnh để tôi có thể gọi các phương thức Native từ Javascript. Tôi biết bạn có thể gọi hàm thành công trong Javascript khi mã gốc trả về.Bạn có thể gọi một hàm javascript từ mã gốc (không phải trong cuộc gọi lại) bằng PhoneGap và iOS không?

Điều tôi cần làm là gọi hàm javascript từ mã gốc. Về cơ bản, ứng dụng sẽ kết nối với ứng dụng đồng hành OSX qua mạng cục bộ và khi ứng dụng OSX gửi dữ liệu đến ứng dụng iOS, ứng dụng được xử lý theo phương pháp C Mục tiêu, tôi cần có khả năng gửi kết quả vào PhoneGap/javascript và thực hiện điều gì đó với nó trong WebView.

Điều này có khả thi không? Tôi chỉ có thể tìm thấy thông tin về việc gọi bản địa từ javascript không phải là cách khác.

Cảm ơn, Thomas

Sử dụng mã từ trả lời dưới đây:

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]; 
} 

Cho tôi những lỗi 'thu Unknown 'theWebView' cậu có nghĩa là 'UIWebView' ?

UPDATE: Tìm thấy câu trả lời: sử dụng các helper PhoneGap tôi có thể viết một cái gì đó như thế này ...

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

Trả lời

4

Tìm thấy trình trợ giúp PhoneGap để thực hiện điều này ... Viết javascript vào webXem sử dụng:

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

Bạn có thể vui lòng xây dựng câu trả lời của mình không. Tôi đang gặp vấn đề tương tự và mới mẻ đối với Cordova. Tôi gọi nó từ MainViewController và cũng từ plugin Phonegap của tôi, nó không trả lời trong webview. Là cái gì đó của họ tôi đang mất tích? – bhuwansahni

+0

@bhuwansahni Tôi sợ cordova có thể đã thay đổi rất nhiều kể từ khi tôi làm điều này vì vậy tôi không hoàn toàn chắc chắn những gì sẽ được yêu cầu ngay bây giờ. Tôi đã có thể gọi nó giống như vậy từ bất kỳ phương pháp nào trong ứng dụng của tôi - có thể xem bài viết này trên tài liệu để biết thêm thông tin: http://docs.phonegap.com/en/2.0.0/guide_plugin-development_ios_index.md. html – tsdexter

0

tác phẩm này với bạn Will?

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

Taken từ trang này:

Bạn cũng có thể gọi các hàm JavaScript với lập luận. Giả sử rằng bạn đã viết một hàm JavaScript trông giống như sau:

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

Mục đích của nó là thêm hình ảnh vào trang web. Nó được gọi với ba đối số: hình ảnh, URL của hình ảnh; chiều rộng, chiều rộng màn hình của hình ảnh; và chiều cao, chiều cao màn hình của hình ảnh. Bạn có thể gọi phương thức này theo một trong hai cách từ Objective-C. Là người đầu tiên tạo ra các mảng các đối số trước khi sử dụng cây cầu 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

Thật không may, đây là OSX cụ thể, và OP đang sử dụng PhoneGap và iOS. – darvids0n

+0

Có, tôi cần khả năng này trên Ứng dụng iOS chứ không phải Ứng dụng đồng hành Mac OSX. Cảm ơn bạn mặc dù. – tsdexter

10

Bạn có thể dễ dàng gọi JavaScript từ mã nguồn gốc với một UIWebView:

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

Để sử dụng kết quả của một hàm ở đâu đó như một arg đến một hàm JS:

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

Tuyệt vời điều này sẽ làm việc cho tôi. Tôi thậm chí không nghĩ đến việc sử dụng lớp UIWebView, tôi đã quá tập trung vào API PhoneGap mà tôi đoán. Cám ơn rất nhiều! – tsdexter

+0

Phải chờ 4 phút để chấp nhận ... – tsdexter

+0

Cảm ơn bạn đã cập nhật. Đó có lẽ sẽ là câu hỏi tiếp theo của tôi. – tsdexter

1

Bạn nên cố gắng này,

[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"]; 
Các vấn đề liên quan