James
James

Reputation: 235

Inject a local javascript into UIWebView

Is there a way to inject a local JS file or a JS file that's store on my server into any web page loaded by UIWebView?

Say I navigate to google.com in that UIWebView, it renders that page and also runs my JS file (local or on my webserver)?

Upvotes: 11

Views: 15365

Answers (2)

Aleksandr Larionov
Aleksandr Larionov

Reputation: 823

Would like to complete Sherman's answer. Xcode defines *.js - files as source code and adds it to "Compile Sources" in project preferences, so objc returns nil, when you try to get pathForResource in mainBundle. To fix this issue you have to add your JavaScript file to "Build Phases" > "Copy Bundle Resources" in project preferences. Hope it would be helpful, faced this problem today.

Upvotes: 1

Sherman Lo
Sherman Lo

Reputation: 2759

The following code will inject javascript locally

- (void)injectJavascript:(NSString *)resource {
    NSString *jsPath = [[NSBundle mainBundle] pathForResource:resource ofType:@"js"];
    NSString *js = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:NULL];

    [self.webView stringByEvaluatingJavaScriptFromString:js];
}

Just pass in the name of the file before the js, eg.

[self injectJavascript:@"script"];

To do inject javascript from your server you can download it first and load it into the web view in a similar manner.

Upvotes: 18

Related Questions