UIWebView使用stringByEvaluatingJavaScriptFromString </script>将新的<script>插入到头部

时间:2010-09-10 21:14:49

标签: 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:
     @"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代码没有运行并返回一个空字符串。

我在原型测试应用程序中成功使用了相同的代码。现在在真正的生产应用程序中,它不再起作用了。

以下是我为隔离问题所做的工作,但没有成功:

  • jquery-1.4.2.min.js与加载的HTML
  • 位于同一目录中
  • webview不是nil
  • 当我在safari中加载相同的HTML并在JS控制台中执行JS代码时,一切都按预期运行

我的提示是:原始文档中链接的stylesheet.css文件已损坏(0 KB),但我对此没有任何控制权。这就是我从客户端收到包裹的方式。我应该能够使用它。

1 个答案:

答案 0 :(得分:1)

我不知道为什么,但确切的问题显然是脚本元素没有在第一个加载的HTML文件中被激活。以下文件能够毫无问题地使用脚本。