在我正在研究的jQuery移动网站中,我有以下列方式引用url的锚标记:
这些当然是引用:
所以在我的清单文件中,我是否需要引用"root"版本?例如
CACHE MANIFEST
CACHE:
/directory/
/directory/index.html
/directory/subdirectory/
/directory/subdirectory/index.html
NETWORK:
*
FALLBACK:
/ /offline.html
Run Code Online (Sandbox Code Playgroud)
要么:
CACHE MANIFEST
CACHE:
/directory/index.html
/directory/subdirectory/index.html
NETWORK:
*
FALLBACK:
/ /offline.html
Run Code Online (Sandbox Code Playgroud)
它会自动知道"/ directory /"等同于"/directory/index.html"等吗?好像不会.
我在使用Azure提供.appcache文件时遇到问题.
在Chrome开发者工具控制台中查看时,我收到以下消息
应用程序缓存错误事件:清单提取失败(404)http://mydomain.cloudapp.net/c.appcahe
现在我知道Azure实例的默认vm将无法识别.appcache扩展名和mime类型,因此我将以下内容添加到我的webrole web.config中
<system.webServer>
<staticContent>
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest"/>
</staticContent>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试浏览c.appcache以及控制台中相应的404时,我仍然遇到404错误.
如果我在开发结构中运行应用程序,c.appcache中的资源可以正常下载,并且在IIS中创建的临时网站在iis配置中添加了相应的Mime类型.
任何人都可以帮我解决这个问题.
谢谢
布雷特
我开发了一个使用appcache的iPad网络应用程序.它不是一个完全离线的应用程序,但我使用appcache存储大型图像文件,以便它们不通过3G发送.问题是当清单更新时,appcache会更新iPad是否在wifi或3G上,这可能很昂贵.
是否可以让用户决定是否可以更新appcache?从我所看到的,这是不可能的,这一切都是自动发生的,你只是得到了事件.但也许有一些诡计就像在飞行中或类似地写清单.
如果有帮助,在服务器端使用PHP.谢谢.
看到Chrome中的一些奇怪行为,并且在使用appcache或Chrome时不确定它是否是预期的行为.
它是一个单页面应用程序,由我们的RestAPI提供支持,它在HTTP下请求RestAPI时工作正常,但是一旦我们将url更改为HTTPS版本,它就会停止工作.Chrome控制台中没有很多(即任何)信息,因为它决定停止工作.
我们已经设法将其缩小到NETWORKappcache文件中的部分,我们可以使用它的唯一方法是使用*我们不想做的通配符,因为它绕过了appcache的整个点,并降低安全性(从我阅读文档等的理解).
我们已经尝试了API网址的任何和所有变体(如在各种相关位置中它与通配符的组合),但似乎没有工作(即使https://*不允许成功请求).
任何有经验的人都知道发生了什么事吗?
谢谢
我有以下表现
CACHE MANIFEST
# cache-revision-29541
# cache-creation-date: Fri Dec 5 11:33:29 GMT 2014
CACHE:
app.html
NETWORK:
*
Run Code Online (Sandbox Code Playgroud)
以及app.html
<!DOCTYPE html>
<html manifest="app.manifest">
<head>
<title>cache test</title>
<script>
function checkCache() {
var appCache = window.applicationCache;
var logACEvent = function(e) {
console.log("Cache Event " + e.type + " Status: " + appCache.status);
}
appCache.addEventListener('error', logACEvent, false);
appCache.addEventListener('checking', logACEvent, false);
appCache.addEventListener('noupdate', logACEvent, false);
appCache.addEventListener('downloading', logACEvent, false);
appCache.addEventListener('progress', logACEvent, false);
appCache.addEventListener('updateready', logACEvent, false);
appCache.addEventListener('cached', logACEvent, false);
}
checkCache();
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和我的.htaccess条目(设置内容类型)
AddType …Run Code Online (Sandbox Code Playgroud) 我正在尝试让app cache工作:
CACHE MANIFEST
/css/style.css
/js/colors.js
/js/dropzone.js
/js/jquery.min.js
/js/script.js
/img/icon_analytics.png
/img/icon_exit.png
/img/icon_expand.png
/img/icon_list.png
/img/icon_lock.png
/img/icon_menu.png
/img/icon_more_content.png
/img/icon_settings.png
/img/icon_settings_black.png
/img/svg_icons/close_fullscreen.svg
/img/svg_icons/go_fullscreen.svg
/img/loader.gif
Run Code Online (Sandbox Code Playgroud)
但这是我在控制台中得到的:
GET https://www.google.com/jsapi net::ERR_FAILED
(index):517 Uncaught ReferenceError: google is not defined
(index):524 GET http://www.google-analytics.com/analytics.js net::ERR_FAILED
0.s3.envato.com/files/115114837/profile.jpg:1 GET https://0.s3.envato.com/files/115114837/profile.jpg net::ERR_FAILED
jquery.min.js:3 GET http://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIpBw1xU1rKptJj_0jans920.woff2 net::ERR_FAILED
Run Code Online (Sandbox Code Playgroud)
显然,它拒绝加载.appcache文件中未指定的任何资源.我甚至试图只指定图像,它仍然会为样式表和所有.js文件抛出错误.
这是怎么回事?
通过SSL,清单中的所有资源都必须遵守同源策略.Google Chrome是一个例外,它不遵循这方面的规范.通过SSL,Chrome将从不同的来源加载资源,只要它们仍然通过SSL提供.
我真的想从靠近用户的CDN加载静态资产,如图像,css和javascripts,并且因为我使用HTTPS而避免从我的网络服务器提供它们
我们有什么方法可以解决这些安全限制吗?
我的目标:
主要html加载自:https://mydomain.com.
资产从以下网址加载:https://cdn.mydomain.com (子域但不是同一个来源..)
我目前使用的Appcache文件,但似乎不适用于Safari和iOS iphone:
CACHE MANIFEST
CACHE:
https://cdn.mydomain.com/main.css
https://cdn.mydomain.com/main.zepto.js
NETWORK:
/
*
Run Code Online (Sandbox Code Playgroud) 我在注册我的服务人员时遇到了问题.当我尝试注册它时,浏览器抱怨"未捕获(在承诺中)TypeError:无法读取未定义的属性'addAll'"它在第6行中断,我尝试将addAll添加到缓存中.我以为open方法创建了缓存对象,为什么它未定义?
"use strict";
self.addEventListener('install', event => {
event.waitUntil(
caches.open('test').then(function(cache) {
return cache.addAll([
'/index.html',
'/'
]);
})
);
});
self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim());
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
return response || fetch(event.request);
})
);
});
Run Code Online (Sandbox Code Playgroud)