2009-08-19 22 views
5

Có thể chạy một số mã javascript (có lẽ là NSString làm đầu vào) mà không cần sử dụng UIWebView? Tôi muốn chạy mã này trong một thread riêng biệt để UIWebView là không thể và tôi không thực sự muốn render bất cứ điều gì, chỉ cần lấy lại kết quả.Chạy javascript mà không có UIWebView có thể?

Trả lời

3

tôi đã không cố gắng này, nhưng đây là một ý tưởng:

Viết mã để phân bổ một trống UIWebView nhưng không thêm nó như là một subview bất cứ nơi nào, và chỉ cần gọi trực tiếp - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script trên javascript của bạn.

Sau đó sử dụng NSOperation để chạy song song.

Bất kỳ lý do nào có thể không phù hợp với bạn? Tôi nghĩ rằng nó sẽ tránh hiển thị bất cứ điều gì cho UIWebView.

Là một lưu ý phụ, tôi không thể nghĩ ra bất cứ điều gì bạn có thể làm trong javascript mà bạn không thể làm nhanh hơn trực tiếp trong Mục tiêu-C. Ngoại trừ có thể phân tích cú pháp javascript mà bạn nhận được từ bên ngoài, có thể được coi là không có của Apple, tùy thuộc vào chi tiết.

Đoán mục tiêu của bạn: Nếu bạn muốn phân tích cú pháp trả lời của máy chủ JSON, tôi khuyên bạn nên json-framework library hosted on google code. Nó có một giao diện đẹp, và thật dễ dàng để tìm hiểu và tích hợp.

+2

Điều này dường như không hoạt động, đối với mọi phương thức UIWebView tôi cố gọi tôi nhận "bool _WebTryThreadLock (bool), 0xf42930: Đã cố gắng lấy khóa web từ một chủ đề khác với chuỗi chính hoặc chuỗi web. Có thể là kết quả của việc gọi đến UIKit từ một chủ đề thứ cấp. Đang hiện tại ... " Vì lý do của tôi, tôi chủ yếu thử nghiệm :) – user130444

+0

Trừ khi được ghi lại một cách rõ ràng, không an toàn để gọi bất kỳ phương thức nào khác ngoài việc giữ lại * một đối tượng UIKit. Vì vậy, tôi sẽ không mong đợi điều này để làm việc. –

+0

* phát hành kỹ thuật là an toàn chủ đề bởi chính nó, nhưng nếu bạn là người cuối cùng phát hành một đối tượng, nó có thể gây ra dealloc được chạy trên thread của bạn, mà không phải lúc nào cũng an toàn. –

1

Tôi nghĩ rằng bài viết của Parmanoir Taming JavascriptCore within and without WebView có thể cung cấp cho bạn một số lời khuyên.

+0

JavaScriptCore không được hiển thị trong SDK (WebKit là một khung công tác riêng) nhưng liên kết rất thú vị, cảm ơn! – user130444

0
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(getResults:) userInfo:nil repeats:YES]; 

-(void)getResults 
{ 
    NSString *value = [self.webView stringByEvaluatingJavaScriptFromString:@"javascript"]; 
} 

Bất kỳ lý do nào bạn không thể làm điều gì đó như thế này. Không nên là lớn của một chi phí trên chủ đề chính của bạn.

Các vấn đề liên quan