views:

82

answers:

1

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?

+1  A: 

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.

Stargazer712
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...
Kalle
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.
Stargazer712
@Stargazer712, 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]]`
Michael Kessler
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.
Kalle
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).
Stargazer712