2009-08-19 3 views
5

Возможно ли запустить код javascript (возможно, NSString) без использования UIWebView? Я хотел бы запустить этот код в отдельном потоке, поэтому UIWebView невозможен, и я действительно не хочу ничего отображать, просто верните результаты.Запустить javascript без возможности UIWebView?

ответ

3

Я не пробовал, но вот одна идея:

Написать код выделить пустой UIWebView, но не добавляет его как подвид в любом месте, и только непосредственно вызывать - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script на вашем JavaScript.

Затем используйте NSOperation для запуска этого параллельно.

Любые причины, которые могут не сработать для вас? Я думаю, что это не позволит отобразить что-либо для UIWebView.

В качестве примечания, я не могу думать ни о чем, что вы можете сделать в javascript, что вы не можете сделать более быстро непосредственно в Objective-C. За исключением, может быть, разбора javascript, который вы получаете извне, который Apple может считаться не-нет, в зависимости от деталей.

Угадайте свои цели: Если вы хотите разобрать ответ сервера JSON, я рекомендую json-framework library hosted on google code. Он имеет приятный интерфейс, и его удивительно легко изучить и интегрировать.

+2

Это не работает, для каждого метода UIWebView, который я пытаюсь вызвать, я получаю «bool _WebTryThreadLock (bool), 0xf42930: пытался получить веб-блокировку из потока, отличного от основного потока или веб-потока. может быть результатом вызова в UIKit из вторичного потока. Сбой сейчас ... » По моим причинам, я в основном экспериментирую :) – user130444

+0

Если явно не задокументировано, небезопасно вызывать любой метод, кроме сохранения * на объект UIKit. Поэтому я не ожидал, что это когда-нибудь будет работать. –

+0

* технически релиз является потокобезопасным сам по себе, но если вы последний человек для выпуска объекта, это может привести к тому, что dealloc будет запущен на вашем потоке, что не всегда безопасно. –

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

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

Любая причина, по которой вы не могли бы просто сделать что-то подобное. Не должно быть такого большого накладного расхода на основной теме.

Смежные вопросы