9

In the iPad project I'm working on I've got a UIWebView inside of the app which displays a .html file which links to a .css file, i.e.

<link rel="stylesheet" href="style.css" type="text/css">

These files are stored locally on the iPad but are fetched from a remote server. I've noticed that UIWebView caches the .css file more or less indefinitely, and refuses to load the new file whenever I change it. I've once changed the name of the file just to get it to reset, but that's unacceptable in the long run.

Is there a way to prevent caching of the CSS file in a UIWebView? Or even better, is there a way to say when to cache and when not to?

2 Answers 2

17

Yes.

Change your line to this:

<link rel="stylesheet" href="style.css?version=1" type="text/css">

Every time that you update the stylesheet, change the version. The browser will think that it is a different page because of the query string, and your server will ignore it.

If you are using a server side language such as PHP, you can also do the following:

<link rel="stylesheet" href="style.css?version=<?php echo time(); ?>" type="text/css">

This will change the version every time you refresh, thus stopping all caching.

Sign up to request clarification or add additional context in comments.

7 Comments

That's a neat idea, for sure! But if I say I have something like 15 .html files which each have their own <link> line, this would still not solve the problem. If it was only one file...
Having 15 files with the exact same <link> tag is a sign of duplication in your code. Remove duplication, then changing the version will be trivial.
no server side languages on local files in iPad - only HTML, CSS and JavaScript. @Kelle, you might use @Stargazer712's time suggestion from Objective-C. Something like this: [htmlString stringByReplacingOccurrencesOfString:@"style.css" withString:[NSString stringWithFormat:@"style.css?time=%@", [[NSDate date] description]]
Stargazer712: why is having multiple .html files which each link to the same CSS file duplication in code? Duplication would be putting the CSS straight into the HTML file in a style tag. This is more like inheriting from the same class in a bunch of objects. Michael: yeah, I went with that route in fact. Thanks for the input, both of you.
You answered your own question. Making a change such as this requires that you change 15 files. That is duplication. It doesn't sound like you have access to a server-side language, so this may not have a quick remedy, but if you do have access to a server-side language, you need to look into using templates or master pages (depending on the language of course).
|
1

The better way that keeps your HTML markup and iOS code isolated is

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:yourRequest];

1 Comment

[[NSURLCache sharedURLCache] removeAllCachedResponses]; That's to clear all. See ToddH's answer here for a way to also limit the amount of memory the caching is allowed to use. Really helps with webview perf. stackoverflow.com/questions/5468553/clearing-uiwebview-cache

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.