UIWebView插入新的<;脚本>;使用stringByEvaluatingJavaScriptFromString导入头部
我正在iPad上用iOS 3.2在UIWebView中加载现有html文档。加载HTML后,我运行以下代码将jQuery插入此文档:UIWebView插入新的<;脚本>;使用stringByEvaluatingJavaScriptFromString导入头部,javascript,uiwebview,ipad,Javascript,Uiwebview,Ipad,我正在iPad上用iOS 3.2在UIWebView中加载现有html文档。加载HTML后,我运行以下代码将jQuery插入此文档: - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"load complete"); if (webView == self.contentView) { [self.contentView stringByEvaluatingJavaScriptFromString: @"v
- (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;
}
据我所知,这几乎是在UIWebView中将JS插入加载的HTML的标准方法
然而,我的问题是,我的jQuery代码没有运行,并且返回一个空字符串
我在原型测试应用程序中成功地使用了相同的代码。现在在真正的生产应用程序中,它不再工作了
以下是我为隔离问题所做的工作,但没有成功:
- jquery-1.4.2.min.js与加载的HTML位于同一目录中
- 网络视图不是零
- 当我在safari中加载相同的HTML并在JS控制台中执行JS代码时,一切都按预期运行
我得到的一个提示是:原始文档中链接的stylesheet.css文件已损坏(0 KB),但我对此没有任何控制权。这就是我从客户那里收到包裹的方式。我应该能够使用它。我不知道为什么,但确切的问题显然是脚本元素在第一个加载的HTML文件中没有被激活。以下文件能够毫无问题地使用脚本