2010-08-20 17 views
5

例如,Google试图将JQuery注入到我无法控制的页面的UIWebView中。当UITextField获得焦点,我执行下面的代码行:如何将JQuery注入到UIWebView中的现有页面?

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用于加载新创建的<script>标记,因此我知道它正在UIWebView中执行。我如何正确注入它才能执行它?

编辑:

我有事件试过这种调用该函数来改变颜色后:

[myWebView stringByEvaluatingJavaScriptFromString:@"alert($('body').css());"]; 

没有警报节目。

回答

4

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

+1

我发现我的代码确实工作,只是不可靠。阅读完文章后,可能是因为DOM尚未准备好。在浏览完文章之后,执行延迟选择器可能是等待在DOM准备好之前使用jQuery执行更改的诀窍。当我有机会时,我会试试看。 – 2010-08-26 00:32:08

+0

你的博客帖子从网上消失:( – 2011-03-10 05:54:16

+0

@Hamutsi。修正了!我改了博客引擎,打破了我所有的链接。 – 2011-03-10 18:19:45

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服用。

+0

我知道这是一个旧的线程,但是这个代码和源代码文章中的代码对dataWithContentsOfURL的使用很少:jQuery库最终从googleapis.com下载,同时阻塞了主线程。 – 2014-04-01 02:46:05

+0

同意!此答案仅用于演示目的,当然这不是推荐的方法。 – Stunner 2014-04-01 03:22:41