Introduction
- Image Cache is JS library used to provide a nice interface for
locally storing images for offline apps using PhoneGap/Cordova. - This library is especially useful for mobile web applications using
Phonegap/Cordova where image becomes stale (invalid) after normal offline navigation.
therefore in this case we can not relied upon Normal Cache. - So by using image cache we can store images in the cache and replace the stale version of normal cache
with fresh version of image cache. - This is the best solution I have found so far to provide easy caching
of images within a Cordova web app while storing 10 to 15 images when you can not get rid of offline navigation.
Using imgcache.js
Installation
To start to use this library, import js/imgcache.js within your html file:
<script src="js/imgcache.js"></script>
Using with PhoneGap/Cordova: see [CORDOVA.md.][1]
Using as AMD / CommonJS modules
To use this library with AMD:
define(function (require) {
var ImgCache = require("imgcache");
});
To use this library with CommonJS:
var cache = require("imgcache");
Setup your cache
Before initializing the cache, you must specify any default option you wish to override:
// write log to console
ImgCache.options.debug = true;
// increase allocated space on Chrome to 50MB, default was 10MB
ImgCache.options.chromeQuota = 50*1024*1024;
See ImgCache.options
at the top of the source file for more settings.
After setting any custom configuration, initialize the cache:
ImgCache.init(function () {
alert('ImgCache init: success!');
// from within this function you're now able to call other ImgCache methods
// or you can wait for the ImgCacheReady event
}, function () {
alert('ImgCache init: error! Check the log for errors');
});
If the cache successfully initializes, ImgCache.ready
will be set to true. You can also watch for the triggered ImgCacheReady
event.
For PhoneGap/Cordova, ImgCache.init()
must be called after the onDeviceReady event has been triggered
Storing images
Images are stored into the local folder specified by ImgCache.options.localCacheFolder
. To add a file to the cache:
ImgCache.cacheFile('http://my-cdn.com/users/2/profile.jpg');
To cache an image defined as a background image, you can either use cacheFile or use the helper function ImgCache.cacheBackground
that accepts a DOM/jQuery element, retrieves its background attribute and cache that file.
Using cached images
Once an image is stored in the cache, you can replace the file displayed in an img element by the cached one:
var target = $('img#profile');
ImgCache.cacheFile(target.attr('src'), function () {
ImgCache.useCachedFile(target, function () {
alert('now using local copy');
}, function(){
alert('could not load from cache');
})
});
To check if a file is stored locally:
ImgCache.isCached(target.attr('src'), function(path, success) {
if (success) {
// already cached
ImgCache.useCachedFile(target);
} else {
// not there, need to cache the image
ImgCache.cacheFile(target.attr('src'), function () {
ImgCache.useCachedFile(target);
});
}
});
When you no longer want to use the locally cached file:
var target = $('img#profile');
ImgCache.useOnlineFile(target);
Clearing the cache
ImgCache.clearCache(function () {
// continue cleanup...
}, function () {
// something went wrong
});
Important Methods
ImgCache.init()
-- initialises the local cache
ImgCache.cacheFile()
-- writes a copy of a file into the local cache
ImgCache.isCached()
-- checks if a the given image exists in the cache - does not check if the latest version of that file is cached
ImgCache.getCachedFile()
-- returns the cached file
ImgCache.getCachedFileURL()
-- returns the URL of the cached version of a file
ImgCache.useCachedFile()
-- replaces the img src with the cached version
ImgCache.useCachedFileWithSource()
-- similar to useCachedFile but with the image source url as extra parameter
ImgCache.useOnlineFile()
-- replaces back the img src with the original (online) version // synchronous method
ImgCache.clearCache()
-- clears the local cache folder
ImgCache.isBackgroundCached()
-- checks if a the given element background image exists in the cache - does not check if the latest version of that file is cached
ImgCache.cacheBackground()
-- caches the background image of an element
ImgCache.useCachedBackground()
-- replaces the background image source of the given element with the cached version
ImgCache.useBackgroundOnlineFile()
-- replaces back a background image with the original (online) version
ImgCache.removeFile()
-- removes a given file from the cache