不用UIWebView也能运行JavaScript吗?

5

是否可以在不使用 UIWebView 的情况下运行一些 JavaScript 代码(可能需要一个 NSString 作为输入)?我想在一个单独的线程中运行这个代码,所以 UIWebView 不可用,我也不想渲染任何东西,只是想得到结果。

3个回答

3
我没有尝试过这个,但这是一个想法:
编写代码来分配一个空的UIWebView,但不将其添加为任何子视图,只需直接在你的JavaScript上调用- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
然后使用NSOperation并行运行它。
你有什么不能工作的理由吗?我认为它可以避免显示任何UIWebView东西。
另外,除了从外部获取的javascript解析可能被苹果公司视为禁止,我无法想到任何你不能直接在Objective-C中更快地完成的事情。
猜测你的目标:如果你想解析JSON服务器回复,我建议使用托管在Google Code上的json-framework库。它具有良好的界面,非常容易学习和集成。

2
这似乎不起作用,我尝试调用每个UIWebView方法时都会得到“bool _WebTryThreadLock(bool),0xf42930:尝试从主线程或Web线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃了...”至于我的原因,我主要是在进行实验 :) - user130444
除非有明确的文档说明,否则在UIKit对象上调用除retain*之外的任何方法都是不安全的。因此,我不认为这会起作用。 - Vincent Gable
从技术上讲,释放本身是线程安全的,但如果您是最后一个释放对象的人,则可能会在您的线程上运行dealloc,这并不总是安全的。 - Vincent Gable

1

JavaScriptCore在SDK中没有公开(WebKit是一个私有框架),但这个链接非常有趣,谢谢! - user130444

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

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

你为什么不能像这样做呢?在主线程上应该不会有太大的开销。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接