2009-08-19 21 views
0

So würde Ich mag die folgende Javascript auf einer offenen Webseite in einem UIWebView auszuführen:UIWebView und Javascript von Taste

- (IBAction)pushDownoad { 
    [webView stringByEvaluatingJavaScriptFromString: 
    var myWin=window.open("","myWin","width=800,height=600,scrollbars,resizable,menubar"); 
    var myStr=document.documentElement.innerHTML.toLowerCase(); 
    myStr=myStr.replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\r\n/g,"<br>"); 
    var a=myStr.lastIndexOf("embed src=")+11; 
    var b=myStr.lastIndexOf("ec_rate"); 
    myStr=myStr.substring(a,b);   
    myStr='<a href="'+myStr+'">Get Video</a>'; 
    myWin.document.open(); 
    myWin.document.write(myStr); 
    myWin.document.close();] 
} 

Der springende Punkt in diesem Javascript für den Text zwischen zwei Sätze zu suchen ist, und ziehen Sie dieser Text aus dem Quellcode. Wenn dieses Skript nicht verwendbar ist, wie würde ich dies tun, so dass das Javascript nach Text zwischen zwei bestimmten Phrasen (die ein Link sein wird) sucht und dann öffnet diesen Link in der aktuellen UIWebView.

Vielen Dank an alle.

Antwort

0

Okay, zuerst müssen Sie kein Fenster öffnen und schreiben (und es wird wahrscheinlich nicht funktionieren, window.open in UIWebViews fehlgeschlagen, obwohl es in Mobil-Safari funktioniert). Sie müssen nur den Wert zurückgeben, er wird automatisch in Ziel C gemarshallt. So sollte Ihre JS in etwa so aussehen:

var myStr=document.documentElement.innerHTML.toLowerCase(); 
myStr=myStr.replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\r\n/g,"<br>"); 
var a=myStr.lastIndexOf("embed src=")+11; 
var b=myStr.lastIndexOf("ec_rate"); 
myStr=myStr.substring(a,b);   
myStr='<a href="'+myStr+'">Get Video</a>'; 

//last statement will be returned 
myStr; 

Angenommen, der obige Code ist gültig JS, das zurückgibt, was Sie wollen, wenn Sie es so etwas wie Firebug testen, können Sie es mit stringByEvaluatingJavaScriptFromString benutzen diesen Wert in Ihrer Anwendung zu bekommen. Sie können es jedoch nicht einfach in und ausschneiden, da Sie einen NSString übergeben müssen. Das heißt, Sie müssen entweder es entkommen, oder vorzugsweise sind sie in einer separaten Datei in Ihre Ressourcen, die Sie gerade in laden Zum Beispiel:.

- (IBAction) pushDownoad { 
    NSError *error = nil; 
    NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:@"stringFinder" ofType:@"js"]; 
    NSString *jsCode = [NSString stringWithContentsOfFile:jsFilePath encoding:NSUTF8StringEncoding error:&error]; 
    NSLog(@"link code: %@", [webView stringByEvaluatingJavaScriptFromString:jsCode]); 
} 

Offensichtlich sollten Sie den Fehler überprüfen, und davon ausgehen, dass Sie die JS setzen Code in eine Datei namens stringFinder.js in den Ressourcen Ihrer App ein. An diesem Punkt haben Sie den Link und Sie können tun, was Sie wollen, einschließlich der Erstellung einer neuen Ansicht, um es anzuzeigen.