2010-08-20 16 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