Load .CSS file from within app in uiwebview

wkwebview load html string
wkwebview css not working
wkwebviewconfiguration example
wkwebview user agent
wkwebview inject css

i am trying to load .js and .css files from within app resources to uiwebview. and i am able to load .js file but can not load .css file please help. here is my code

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    //NSString *cssFile = @"styling.css";

    NSString *jsFile = @"storage.js";
    NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:jsFile ofType:nil];
    NSURL *jsURL = [NSURL fileURLWithPath:jsFilePath];
    NSString *javascriptCode = [NSString stringWithContentsOfFile:jsURL.path encoding:NSUTF8StringEncoding error:nil];
    [webView stringByEvaluatingJavaScriptFromString:javascriptCode];
}

this code it working perfectly for .js file but how can i use .css file in it?

You are basically on the right track, but you should be able to add the css using the same stringByEvaluatingJavaScriptString method.

- (void)webViewDidFinishLoad:(UIWebView *)webView {


    NSString *jsFile = @"storage.js";
    NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:jsFile ofType:nil];
    NSURL *jsURL = [NSURL fileURLWithPath:jsFilePath];
    NSString *javascriptCode = [NSString stringWithContentsOfFile:jsURL.path encoding:NSUTF8StringEncoding error:nil];
    [webView stringByEvaluatingJavaScriptFromString:javascriptCode];

    // Updated to load css from "styling.css" file. 
    NSString *cssFile = @"styling.css";
    NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:jsFile ofType:nil];
    NSURL *cssURL = [NSURL fileURLWithPath:jsFilePath];
    NSString *cssString = [NSString stringWithContentsOfFile:jsURL.path encoding:NSUTF8StringEncoding error:nil];

    // NSString *cssString = @"body { font-family: Verdana, Geneva, sans-serif; font-size: 50px; color: #F00; }";

    NSString *javascriptString = @"var style = document.createElement('style'); style.innerHTML = '%@'; document.head.appendChild(style)"; 
    NSString *javascriptWithCSSString = [NSString stringWithFormat:javascriptString, cssString];
    [webView stringByEvaluatingJavaScriptFromString:javascriptWithCSSString]; 

}

Once you do this, you can verify that the style is applied by using Safari remote debugging to view the source for the page displayed on the device / simulator. It can show you if some existing CSS is overriding yours.

Using iPhone UIWebView Class with local CSS & JavaScript , CSS File & JavaScript Resources Using iPhone UIWebView Class This post will cover the basic setup and creation of an application with web content for iPhone that will load local CSS files Or from within CSS like this:. An alternative approach is to have your html reference a .css file and then modify the .css file before loading the html into the UIWebView. For example, in the view’s controller: – (void)viewDidLoad { [super viewDidLoad]; NSString *dcssPath = [[NSBundle mainBundle]

NSString *HTML_HEADER=@"<HTML><HEAD><link rel='stylesheet' href='#FILE1#' type='text/css'></HEAD><BODY>";
NSString *HTML_FOOTER=@"</BODY></HTML>";

NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSString *html_header_with_files = [HTML_HEADER stringByReplacingOccurrencesOfString:@"#FILE1#" withString:cssFilePath];

NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,yourHtmlFile.html,HTML_FOOTER];

NSLog(@"htmlString %@", htmlString);
// Load HTML
[self.webView loadHTMLString:htmlString baseURL:nil];

Note: Add your all CSS/JS/HTML files to Project Properties >> Build Phases >> Copy Bundle Resources.

UIWebView – Loading External Images and CSS » The App , An alternative approach is to have your html reference a .css file and then web apps wrapped inside a UIWebView, and you may get rejected. It’s important to note that resources (images, CSS and JavaScript Files) inside your application bundle are at the root of the bundle, even if you place them in an separate group (folder) in your project. Giving the correct URL to UIWebView will allow you to refer to local resources in your page, but it does not work in all cases.

I have written on how to add .css file in Xcode and load any HTML String along with applying the local css, in a wkwebview

https://medium.com/if-let-swift-programming/css-in-your-xcode-project-2b7011a29cb3

Do check if any of this helps.

Creating a .css file

⏩ Open Text Edit (Ensure you have ‘Make Plain Text’ selected under Format, or you might keep wondering how to save with .css extension)

⏩ Scribble down your css code that you would want to apply on your web view’s HTML string (In my case I wanted 2 types of fonts, some custom properties on links and an image instead of a bullet item, so below is what my css file looks like)

@font-face
{
 font-family: 'Gotham-Book';
 src: local('Gotham-Book'),url('Gotham-Book.otf') format('opentype');
}
@font-face
{
 font-family: 'Gotham-Medium';
 src: local('Gotham-Medium'),url('Gotham-Medium.otf')    format('opentype');
}
a {
 color: #16A4FA;
 text-decoration: none;
}
li {
 margin: 0 0 0 -30px;
 padding: 10px 0 10px 40px;
 list-style: none;
 background-image: url('myImage.png');
 background-repeat: no-repeat;
 background-position: left top 8px;
 background-size: 30px;
}

Here, Note that if you want some images to be loaded in your web view you will have to add them as a resource file in your project (It won’t load from your Assets.xcassets)

Add .css in xcworkspace It’s as easy as adding some resource file

⏩ Add your file by dragging it to your desired location, and copy items if needed

⏩ Ensure your file is present in the Build Phases > Copy Bundle Resources list

Loading HTML string in your web view

import WebKit

extension WKWebView {

    func loadHTML(fromString: String, colorHEX: String = "#757575", fontFamily: String = "Gotham-Book", fontSize: String = "14") {
        let htmlString = """
        <link rel="stylesheet" type="text/css" href="myCSSFile.css">
        <span style="font-family: '\(fontFamily)'; font-weight: normal; font-size: \(fontSize); color: \(colorHEX)">\(fromString)</span>
        """
        self.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL)
    }
}

Calling

/// webView is a WKWebView.
webView.loadHTML(fromString: "yourHTMLStringGoesHere")

How to load a HTML string into a WKWebView or UIWebView , i am trying to load .js and .css files from within app resources to uiwebview. and i am able to load. Most of the times we may be requested to load a URL, but sometimes they ask us to inject javascript into the loaded page or maybe CSS, I know it’s weird to inject it directly within the app

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Load file .js
    NSString *jsFile = @"storage.js";
    NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:jsFile ofType:nil];
    NSURL *jsURL = [NSURL fileURLWithPath:jsFilePath];
    NSString *javascriptCode = [NSString stringWithContentsOfFile:jsURL.path encoding:NSUTF8StringEncoding error:nil];
    [webView stringByEvaluatingJavaScriptFromString:javascriptCode];
    // Load file .css
    NSString *cssFile = @"styling.css";
    NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:cssFile ofType:nil];
    NSURL *cssURL = [NSURL fileURLWithPath:cssFilePath];
    NSString *cssCode = [NSString stringWithContentsOfFile:cssURL.path encoding:NSUTF8StringEncoding error:nil];
    NSString *jsAddCssString = @"var style = document.createElement('style'); style.innerHTML = '%@'; document.head.appendChild(style)";
    NSString *jsWithCssString = [NSString stringWithFormat:jsAddCssString, cssCode];
    [webView stringByEvaluatingJavaScriptFromString:jsWithCssString];
}

You can try it.

UIWebView, How to load a HTML string into a WKWebView or UIWebView: it inside your app, it's easy to do in both UIWebView and WKWebView . If you want to load resources from a particular place, such as JavaScript and CSS files,  How to load a HTML string into a WKWebView or UIWebView: loadHTMLString() Swift version: 5.0. Paul Hudson @twostraws May 28th 2019. If you want to generate HTML locally and show it inside your app, it's easy to do in both UIWebView and WKWebView.

Load a UIWebView in iOS that can also load local resources like , An iOS app linked on or after iOS 10.0 must include in its Info.plist file the usage CSS, and JavaScript contained inside a UIWebView with Web Inspector. Add the local html file into your project name it as home.html, then create the NSURLRequest using NSURL object, then passing the request to webview it will load the requested URL into webview and if you are not using storyboard add the uiwebview into viewcontroller view like the below code.

Determining the content size of a WKWebView - Amer Hukić, <!doctype html>. <html>. <head>. <link rel="stylesheet" href="your_styles.css" type="text/css">. <script src="your_javascript.js"></script>. </head>. <body>. A big advantage of using a WebView inside an installable application is that you can store assets inside the app. This lets your app work offline and improves load times, since the WebView can retrieve assets directly from the local file system. To store files such as HTML, JavaScript, and CSS locally, put them in the assets directory.

Apply CSS into your UIWebVIew, The web view had to be embedded inside a scroll view along with a couple of other views. Loading local CSS file into HTML was pretty easy in UIWebView . UIWebView very slow loading css files in iOS 9. I have an app that loads some content into a UIWebView instance. It was discovered recently that new pages were taking 30+ seconds to load. After much digging, I have been able to narrow it down to css files loading in iOS 9. If I load the same exact pages in iOS 8, the loadtime is 1-4 seconds.

Comments
  • Well... Add an error and tell us, what it says! NSError *e; [NSString stringWithContentsOfFile:jsURL.path encoding:NSUTF8StringEncoding error:&e]; if (e) { NSLog(@"%@", e); }
  • there is no error for now with js file it is working perfectly but i need to know how can i include css file.
  • @VixHunk Did you check this post stackoverflow.com/questions/33123093/…?
  • You could try this solution https://stackoverflow.com/questions/33123093/insert-css-into-loaded-html-in-uiwebview-wkwebview
  • @Solomiya tried this one but not working. my .php file is remotely loading in webview. and js n css files in bundle.
  • your code worked perfectly but yeah you are right. but how can i do this "cssString" with my styling.css. how can i pass that file coding inside this cssString
  • I updated the response to load the css from a file named styling.css. If it no longer works, either the file is not included in your target, the file name is not right, or there are errors in the css that are causing it not to be valid (most likely).
  • my html is not in bundle it will load remotely from a url
  • Simply load your html content from URL to string variable. And replace the below line in above code. NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,yourHtmlContent,HTML_FOOTER];
  • what is yourHtmlContent?