Inject a local javascript into UIWebView

15,237

Solution 1

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.

Solution 2

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.

Share:
15,237
James
Author by

James

Updated on June 04, 2022

Comments

  • James
    James almost 2 years

    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)?