UIWebView вставка новых <script>в голову, используя stringByEvaluatingJavaScriptFromString - PullRequest
0 голосов
/ 11 сентября 2010

Я загружаю существующий HTML-документ в UIWebView с iOS 3.2 на iPad.После загрузки HTML я запускаю следующий код для вставки jQuery в этот документ:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"load complete");
if (webView == self.contentView) {

    [self.contentView stringByEvaluatingJavaScriptFromString:
     @"var headID = document.getElementsByTagName(\"head\")[0];"    
     "var newScript = document.createElement('script');"
     "newScript.type = 'text/javascript';"
     "newScript.src = 'jquery-1.4.2.min.js';"
     "newScript.onload=window.location.assign(\"fj://jquery\");"
     "headID.appendChild(newScript);"];

}
NSLog(@"inserting jquery");
}

Затем следующий код запускается, когда приходит поддельный запрос для fj: // jquery:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"URL: %@", [[request URL] scheme]);

if ([[[request URL] scheme] compare:@"fj"] == NSOrderedSame) {
    NSString * command = [[request URL] host];

    if ([command compare:@"jquery"] == NSOrderedSame) {
        NSLog(@"got jquery");   

        NSString * offsetStr = [self.contentView stringByEvaluatingJavaScriptFromString:@"$('P:last').offset().top;"];

        NSLog(@"offset: %@", offsetStr);            

    }
    return NO;
}

return YES;
}

Насколько я знаю, это все в значительной степени стандартный способ вставки JS в загруженный HTML в UIWebView.

Однако моя проблема в том, что мой код jQuery не запускается и возвращает пустую строку.

Я успешно использовал этот код в тестовом приложении-прототипе.Теперь в реальном производственном приложении оно больше не работает.

Вот что я сделал, чтобы изолировать проблему, но безуспешно:

  • jquery-1.4.2.min.js находится в том же каталоге, что и загруженный HTML
  • , веб-представление не равно nil
  • , когда я загружаю тот же HTML-код в safari и выполняю код JS внутри консоли JS, все работает как положено

Подсказка, которая у меня есть: файл stylesheet.css, указанный в исходном документе, поврежден (0 КБ), но я не могу это контролироватьВот так я получаю посылку от клиента.Я должен быть в состоянии работать с ним.

1 Ответ

1 голос
/ 06 октября 2010

Не знаю почему, но точная проблема заключалась в том, что элементы скрипта не активировались в первом загруженном HTML-файле.Следующие файлы смогли использовать скрипты без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...