我正在iPad上的iOS 3.2的UIWebView中加载现有的html文档。在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;
}
据我所知,这几乎是将UI插入UIWebView中加载的HTML的标准方法。
但是,我的问题是,我的jQuery代码没有运行并返回一个空字符串。
我在原型测试应用程序中成功使用了相同的代码。现在在真正的生产应用程序中,它不再起作用了。
以下是我为隔离问题所做的工作,但没有成功:
我的提示是:原始文档中链接的stylesheet.css文件已损坏(0 KB),但我对此没有任何控制权。这就是我从客户端收到包裹的方式。我应该能够使用它。
答案 0 :(得分:1)
我不知道为什么,但确切的问题显然是脚本元素没有在第一个加载的HTML文件中被激活。以下文件能够毫无问题地使用脚本。