HTML5离线缓存不仅适用于iPad

时间:2017-01-09 21:13:43

标签: ios html5 offline-caching

我正在使用离线缓存来使我的HTML5应用在离线模式下可用。这适用于所有桌面浏览器(Firefox,Chrome,Safari - 我不关心IE)以及Android Chrome,iOS Chrome甚至iPhone上的Safari。但是在iPad safari上它不起作用。

使用现在标准的cache debug routine by Jonathan Stark并通过我的Mac上的Safari进行调试,我在控制台中看到以下内容:

[Log] online: yes, event: checking, status: downloading (cachedebug.js, line 30)
[Log] online: yes, event: downloading, status: downloading (cachedebug.js, line 30)
[Log] online: yes, event: progress, status: downloading (cachedebug.js, line 30, x159)
[Log] online: yes, event: progress, status: updateready (cachedebug.js, line 30)
[Log] online: yes, event: updateready, status: updateready (cachedebug.js, line 30)
[Log] swap cache has been called (cachedebug.js, line 37)
[Error] InvalidStateError: DOM Exception 11: An attempt was made to use an object that is not, or is no longer, usable.
    swapCache (main.js:407)
    (anonymous function) (main.js:407)

注意最后的错误。我确实赞扬了乔纳森的代码中的swapCache行。这种情况几乎总是发生在iPad Safari上 - 但不会出现在任何其他设备/浏览器上。我确实尝试在Safari设置中删除我网站的所有数据 - 无济于事。

因此,应用程序永远不会完全缓存,因此我无法在离线时运行它。

对于记录,我的主文件以此开头:

<!DOCTYPE html>
<html lang="en" manifest="cache.manifest">

main.js中的代码如下所示:

 403 function setupAppCacheListeners() {
 404     var appCache = window.applicationCache;
 405     appCache.addEventListener("downloading", function() { toast("Downloading an update - please do not close the application."); });
 406     appCache.addEventListener("updateready", function() {
 407         appCache.swapCache();
 408         toast("Updates downloaded successfully - please restart the application.", 0);
 409         $('#button-refresh').removeClass('hidden');
 410     });
 411     appCache.addEventListener("cached", function() { toast("Download for offline use completed."); });
up to date."); });
 412     appCache.addEventListener("error", function() {
 413         if(navigator.onLine) {
 414             toast("An error occurred updating the app - please try restarting.");
 415         }
 416     });
 417 }

有趣的是,这个应用程序是我几年前写的另一个应用程序的分支,它完全正常,没有这样的问题。

对此的任何帮助都将非常感激。

0 个答案:

没有答案