2010-08-20 2 views
5

Ich versuche, JQuery in eine UIWebView einer Seite zu injizieren, die ich nicht kontrollieren kann, sagen Google, zum Beispiel. Wenn ein UITextField Fokus erhält, ich Ausführen der folgenden Codezeilen:Wie injiziere ich JQuery in eine bestehende Seite innerhalb eines 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');}"]; 

ich den Hintergrund ändern bin Ausführung zu bestätigen, dass ich in der Lage bin ein JQuery-Skript auszuführen. Ich kann überprüfen, dass die Objective-C-Methode aufgerufen wird, und ich habe sogar eine alert für das Onload des neu erstellten Tags <script> gepflanzt, so dass ich weiß, dass es in der UIWebView ausgeführt wird. Wie injiziere ich es richtig, dass ich es ausführen kann?

EDIT:

I Veranstaltung versucht haben dies nach dem Aufruf der Funktion, die Farbe zu ändern:

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

keine Warnung zeigt.

Antwort

4

Wenn jQuery nicht bereits im DOM vorhanden ist, können Sie stringByEvaluatingJavaScriptFromString: verwenden, um es zu injizieren. Ich hatte ähnliches Problem, ich schrieb einen Blog-Post darüber: HTML parsing/screen scraping in iOS.

+1

Ich finde, dass mein Code tatsächlich funktioniert, nur nicht zuverlässig. Nach dem Lesen Ihres Artikels kann es daran liegen, dass das DOM noch nicht fertig ist. Nachdem Sie Ihren Artikel überflogen haben, kann die Ausführung eines verzögerten Selektors der Trick sein, auf die Ausführung der Änderung mit jQuery zu warten, bis das DOM bereit ist. Ich werde es versuchen, wenn ich eine Chance habe. –

+0

Ihr Blogpost verschwand aus dem Internet :( –

+0

@Hamutsi. Fixed! Ich änderte Blog-Engine und brach alle meine Links. –

7

Das hat für mich gearbeitet:

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*/]; 

von this article genommen.

+0

Ich weiß, dass dies ist ein alter thread, aber sowohl dieser code als auch der code im source article machen einen schlechten gebrauch von dataWithContentsOfURL: Die jQuery library wird von googleapis.com heruntergeladen und blockiert den hauptthread –

+0

Einverstanden! Diese Antwort ist nur für Demonstrationszwecke gedacht Das ist natürlich nicht der empfohlene Ansatz. – Stunner

Verwandte Themen