2009-08-19 42 views
5

是否有可能运行一些JavaScript代码(具有也许是NSString作为输入),而无需使用UIWebView?我想在一个单独的线程中运行这个代码,所以UIWebView是不可能的,我不想渲染任何东西,只需要返回结果。运行没有UIWebView的JavaScript可能吗?

回答

3

我没有试过,但这里是一个想法:

编写代码来分配一个空UIWebView但不会添加任何地方作为一个子视图,而只是直接调用你的JavaScript - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script。然后用NSOperation并行运行。

任何原因,可能不会为你工作?我认为它会避免显示UIWebView的任何内容。作为一个方面说明,我想不出任何你可以用JavaScript做的事情,你不能在Objective-C中直接做得更快。除了解析你在外部获得的javascript,这可能被苹果视为不可能,具体取决于细节。

猜测你的目标:如果你想解析一个JSON服务器的答复,我推荐json-framework library hosted on google code。它有一个很好的界面,学习和集成起来非常容易。

+2

这似乎不工作,对于每个UIWebView方法我尝试调用我得到“bool _WebTryThreadLock(布尔),0xf42930:试图从主线程或Web线程以外的线程获取Web锁。可能是从辅助线程调用UIKit的结果现在崩溃...“ 至于我的原因,我主要是在试验:) – user130444 2009-08-19 21:10:45

+0

除非明确记录,否则调用除保留之外的任何方法*并不安全*一个UIKit对象。所以我不希望这会有效。 – 2012-04-24 21:39:55

+0

*技术上释放是线程安全本身,但如果你是最后一个人释放一个对象,它可能会导致的dealloc要在你的线程,这并不总是安全的运行。 – 2012-04-24 21:40:42

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

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

任何你不能这样做的原因。在主线程中不应该有那么大的开销。