如何将JQuery注入UIWebView中的现有页面?

时间:2010-08-20 00:19:17

标签: iphone objective-c

我正在尝试将JQuery注入我无法控制的UIWebView页面,例如Google。当UITextField获得焦点时,我正在执行以下代码行:

NSString* scriptInject = @"var headElement = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); 
    script.setAttribute('src','http://jquery.com/src/jquery-latest.js');
    script.setAttribute('type','text/javascript'); headElement.appendChild(script);";
    [myWebView stringByEvaluatingJavaScriptFromString:scriptInject];    
    [myWebView stringByEvaluatingJavaScriptFromString:@"$(document).ready(function() {$('body').css('background', '#FF0000');}"];

我正在执行后台更改以验证我是否能够运行JQuery脚本。我可以验证是否正在调用Objective-C方法,我甚至为新创建的alert标记的onload安装了<script>,所以我知道它正在{{1 }}。如何正确地注入它才能执行它?

编辑:

我在调用函数改变颜色后尝试了这个事件:

UIWebView

没有警报显示。

2 个答案:

答案 0 :(得分:7)

这对我有用:

NSString *jqueryCDN = @"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
NSData *jquery = [NSData dataWithContentsOfURL:[NSURL URLWithString:jqueryCDN]];
NSString *jqueryString = [[NSMutableString alloc] initWithData:jquery encoding:NSUTF8StringEncoding];
[webView stringByEvaluatingJavaScriptFromString:jqueryString];

[webView stringByEvaluatingJavaScriptFromString:/*jquery commands here*/];

取自this article

答案 1 :(得分:4)

如果jQuery不在DOM中,您可以使用stringByEvaluatingJavaScriptFromString:来注入它。我遇到过类似的问题,我写了一篇关于它的博文:HTML parsing/screen scraping in iOS