Я загружаю существующий 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 КБ), но я не могу это контролироватьВот так я получаю посылку от клиента.Я должен быть в состоянии работать с ним.