精华内容
下载资源
问答
  • 项目编译过程中,使用了类似Android Gradle Plugin的gradle插件进行编译,在最终打包apk时,会动态修改manifest文件。 近期发现线上用户有反应升级到以下开发环境后,打包apk后manifest文件中没有应有的任何配置。 ...
  • 无法缓存,缓存到这个文件会出错,缓存停止,后面的文件都缓存不了。 2、js脚本出错的无法缓存,但不知道是js文件无法缓存还是引用它的html文件无法缓存。 3、对于用来跳转的的html文件,比如包含document.location ...

    我在参考了以下文章(http://kayosite.com/web-app-by-jquery-mobile-and-html5-offline-web-applications.html)后,做了实践,发现以下几点:

    1、对于php文件,有header("Location:xxxxxxxx");的。无法缓存,缓存到这个文件会出错,缓存停止,后面的文件都缓存不了。

    2、js脚本出错的无法缓存,但不知道是js文件无法缓存还是引用它的html文件无法缓存。

    3、对于用来跳转的的html文件,比如包含document.location = 'xxx';的,无法缓存。必须手动才能缓存,例如

    <script>
    try{window.applicationCache.update();}catch(e){}
    document.location = 'xxx';
      </script>

    对于safari,这个才能用:

    <script>
    setTimeout("document.location = 'xxx'",100);
      </script>

    4、(这条实在Safari上实验得出的)目前发现window.applicationCache触发的事件有以下几种顺序:

    (1)checking->error(html文件的<html>标签的manifest属性指向的文件不存在)

    (2)checking->downloading->cached(没有离线缓存时发生,表示离线缓存下载完成。但在其他时候好像有观察到偶然发生,无法解释。)

    (3)checking->noupdate(检测到服务器上的manifest文件内容未发生变化,使用了之前的离线缓存)

    (4)checking->downloading->updateready(存在离线缓存,浏览器载入并显示之前离线缓存,然后检测到服务器上的manifest文件内容发生了变化,于是更新了离线缓存。值得注意的是,这种情况下,浏览器只载入并显示之前未更新的离线缓存,然后再更新离线缓存,不再显示更新后的离线缓存,所以需要手动更新)

    (5)checking->error(未联网)

    另外,用了以下代码,保证修改服务器端代码后,浏览器能实时反映改变:

    function cacheManifestCheck(){
    window.applicationCache.addEventListener('checking', function(){
            //alert('检查相关联的 manifest 文件是否存在');
        }, true);
    window.applicationCache.addEventListener('noupdate', function(){
    var isFromUpdateReady=sessionStorage.getItem("fromUpdateReady");
    if(isFromUpdateReady){
    sessionStorage.removeItem("fromUpdateReady");
    $("#isUsedCacheManifest").text("本页面是从网上下载的");
    }else{
    //alert('检测到 manifest 没有更新');
    $("#isUsedCacheManifest").text("本页面载入离线缓存");
    }
        }, true);
    window.applicationCache.addEventListener('downloading', function(){
            //alert('缓存下载');
    $("#isUsedCacheManifest").text("页面发生更新,缓存中……");
        }, true);
    window.applicationCache.addEventListener('cached', function(){
            //alert('cached');
    $("#isUsedCacheManifest").text("本页面是从网上下载的");
        }, true);
    window.applicationCache.addEventListener('updateready', function(){
            //alert('已根据 manifest 文件中指定的要求重新下载相应的资源');
    sessionStorage.setItem("fromUpdateReady", true);
    location.reload();
    //$("#isUsedCacheManifest").text("本页面是从网上下载的");
        }, true);
    window.applicationCache.addEventListener('obsolete', function(){
            //alert('manifest 文件请求发生 404 或 410 错误,该缓存已被删除');
    $("#isUsedCacheManifest").text("manifest 文件请求发生 404 或 410 错误,该缓存已被删除");
        }, true);
    window.applicationCache.addEventListener('error', function(){
            //alert('以下四种情况事件:1. manifest 文件请求发生 404 或 410 错误; 2. manifest 文件没有修改,但页面无法正确引用 manifest ;3. 根据 manifest 文件更新资源时发生致命错误(如上面提到的 InvalidStateError 错误);4. 当资源正在更新时 manifest 文件被修改。');
    $("#isUsedCacheManifest").text("本页面载入离线缓存");
        }, true);
    }

    展开全文
  • 什么是 .manifest 文件

    千次阅读 2019-07-26 07:32:38
    [现象]对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提示如下...

    转之:http://hi.baidu.com/y97523/blog/item/ef5a73f0339050a5a40f5281.html

    为了大家都能很方便的理解,我将尽量简单通俗地进行描述。

    [现象]
    对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提示如下:应用程序配置不正确,请重新安装程序……或者是MSVCR80D.dll 没有找到什么的(我记得不是很清楚,不过大致是这样的)

    [分析]
    看到这样的提示,当然不会傻到重装咯。第一反应应该是什么配置有问题、或者是缺少了什么依赖的库文件;于是我就根据以前Windows缺少库文件的经验,把所有库文件(××.DLL)统统一股脑地复制到当前文件夹下来,满心欢喜以为可以运行了,以运行……@#¥@#%¥……还是挂了。

    [探索]
    于是开始网上搜索,我Google,我摆渡;渐渐我发现,这一切都和一个叫做***.manifest 类型的文件发生关系,那么到底什么是 .manifest 文件呢?他有什么用,以前为什么没有?

    后来,经过艰苦努力,终于得知,原来这一切都是Windows 的Assembly Manifest搞的鬼。这个东东的作用就是为了解决 以前windows上的“Dll 地狱” 问题才产生的新的DLL管理解决方案。大家知道,Dll是动态加载共享库,同一个Dll可能被多个程序所使用,而所谓“Dll 地狱”就是当不通程序依赖的Dll相同,但版本不同时,由于系统不能分辨到底哪个是哪个,所以加载错了Dll版本,然后就挂了。于是盖茨就吸取了教训,搞了一个程序集清单的东东,每个程序都要有一个清单,这个清单存再和自己应用程序同名的.manifest文件中,里面列出其所需要的所有依赖,这儿所列出的依赖可不是简单地靠文件明来区分的,而是根据一种叫做“强文件名”的东西区分的,那么什么是强文件明呢?我们来看一下这个.manifest文件便知道了。


    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
    </dependency>
    </assembly>


    我们发现原来这是一个XML格式的文件,其中<dependency>这一部分指明了其依赖于一个名字叫做Microsoft.VC80.CRT的库。但是我们发现,<assemblyIdentity>属性里面还有其它的东东,分别是
    type系统类型,version版本号,processorArchitecture平台环境,publicKeyToken公匙(一般用来标示一个公司)……把他们加在一起便成了“强文件名”了,有了这种“强文件名”,我们就可以根据其区分不同的版本、不同的平台……总之,有了这种强文件名,系统中可以有多个不同版本的相同的库共存而不会发生冲突。

    [深入]

    恩,那么现在,我们就来具体了解一下这一套机制。
    首先是强弱文件名的问题。正如上面提到的那样,为了区分不同版本或不同厂商生成的相同的程序集,必须用一个Assembly Manifest程序清单来列出我这个程序集的强文件名--慢着,到这里你可能会问:刚才不是说Assembly Manifest程序清单是列出其所依赖的程序集的强文件名呢,怎么这里变成了当前文件的强文件明了呢?其实,Assembly Manifest程序清单有两部分功能,上面这个实例之所以标注了其所依赖的文件的强文件名是因为其是客户端的Assembly Manifest,在服务端有另外一个Manifest 来标注。


    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity
    type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file
    name="msvcr80.dll" hash="2a0d797a8c5eac76e54e98db9682e0938c614b45" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>phRUExlAeZ8BwmlD8VlO5udAnRE=</dsig:DigestValue></asmv2:hash></file>
    <file
    name="msvcp80.dll" hash="cc4ca55fb6aa6b7bb8577ab4b649ab77e42f8f91" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>7AY1JqoUvK3u/6bYWbOagGgAFbc=</dsig:DigestValue></asmv2:hash></file>
    <file
    name="msvcm80.dll" hash="55e8e87bbde00d1d96cc119ccd94e0c02c9a2768" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>hWq8zazTsMeKVxWFBa6bnv4hEOw=</dsig:DigestValue></asmv2:hash></file>
    </assembly>



    这个便是从WINDOWS\WinSxS\Manifests目录下取出来的一个manifest文件,再这个文件夹下有一陀子这种XML格式的manifest文件,其是服务端的程序清单。WinSxs是windows XP以上版本提供的[blue]非托管并行缓存(side-by-side catche)[/blue]里面安装了各种版本的经过强文件名签名的系统库,而上面这个文件<assemblyIdentity>正是标注了系统中Microsoft.VC80.CRT的一个版本的强文件名签名,如果其和客户端。.manifest 清单里面<dependentAssembly>所列出的依赖项对上的话,就会被加载。刚才说的side-by-side 是指各种不同的版本并行运行。
    上面这个服务端manifest文件中<file>标签具体指明了当前强文件名签名的到底是哪一个文件,其中还有这个文件的Hash签名,以确保文件的完整性。

    好了,有了这一套机制,就可以非常非常安全地进行库文件关联了,但是、但是貌似还有一个一直困扰我们的问题:这套机制安全是安全了,但是却失去了以前良好的前后版本兼容性,即如果你的系统库发生了升级,那么服务端的版本号发生了变化,那岂不是所有服务端程序都不能使用了吗?其实,windows还使用一个policy的策略文件来确认映射关系。


    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!-- Copyright ? 1981-2001 Microsoft Corporation -->
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity
    type="win32-policy" name="policy.8.0.Microsoft.VC80.CRT" version="8.0.50727.42" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
    type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
    <bindingRedirect
    oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.42"/>

    </dependentAssembly>
    </dependency>

    </assembly>


    这便是在WINDOWS\WinSxS\Policies目录下的一个Policy文件,其中<bindingRedirect>标签便指定了所有8.0.41204.256-8.0.50608.0变本的客户需求映射到8.0.50727.42这个我现在系统中安装的比较新的版本的库。当然我们也能对别的字段进行映射,这样便能很好解决系统升级带来的问题。

    [应用]
    经过以上的讲解,大家对整个依赖查找过程都有了一个整体的认识,那么在实际中问题就好解决了。
    让我们回到实际问题中,我之前说了,把一个程序编译连接成可执行程序后,在别人的电脑上发现找不到其所依赖的库了,那么怎么办呢?聪明的你自然想到把其所依赖的库相应的版本拷贝到目标计算机上面,可是……当你在拼命寻找那个可执行文件的assembly manifests文件的时候,却突然发现找不到了,在执行目录下面明明只有一个exe文件嘛。是不是没有生成呢?显然不会,原来是资源连接器把那个assembly manifests文件连接到了可执行文件里面了;不信,你可以用你的vc++打开一个可执行文件看看,在其资源项里面就有一个叫做RT_MANIFEST的项目。这个里面就是二进制标示的manifests文件。那么根据这里面提供的要求,将相应版本的依赖文件(一般就是CRT运行库)拷贝到系统目录Windows\WinSxS\,记住一般会是连带着一个特殊命名的目录一起拷贝到那个文件夹下,比如CRT的运行库就是WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50608.0_x-ww_b7acac55有这样一个目录,其标注了此库的版本号以及签名等信息,以防止多个版本重名时不能复制到同一WinSxS目录下。

    这样就搞定了么?如果是以前,那么一切都解决了,系统会在这个目录下面找到这个运行库,可是现在单单这样可不行,系统可是要找到这个运行库的assembly manifests文件,并且对比强文件名之后才能加载,所以所以千万别忘了把相应的manifests文件拷贝到\WinSxS\Manifests目录下面。

    当然,这样在目标的系统文件夹下面打动干戈,自然有些过于暴动了,还好,Windows还为我们提供了一种私有查找方式。这种方式会在前面的位置找不到合适库的时候在本地文件夹下面找。所以你只要把之前的库以及那个manifests文件一起拷贝到你的应用程序的路径下面,就可以使用啦。

    根据MSDN的说明,在本地查找并加载遵循一下规则:


    在应用程序本地文件夹中查找名为 <assemblyName>.manifest 的清单文件。在此示例中,加载程序试图在 appl.exe 所在的文件夹中查找 Microsoft.VC80.CRT.manifest。如果找到该清单,加载程序将从应用程序文件夹中加载 CRT DLL。如果未找到 CRT DLL,加载将失败。

    尝试在 appl.exe 本地文件夹中打开文件夹 <assemblyName>,如果存在此文件夹,则从中加载清单文件 <assemblyName>.manifest。如果找到该清单,加载程序将从 <assemblyName> 文件夹中加载 CRT DLL。如果未找到 CRT DLL,加载将失败。



    最后,我想补充的一点是,在你的VC++安装目录下面的“Microsoft Visual Studio 8\VC\redist”目录下,有着所有的提供发布的已经配备相应.manifest的库文件。所以你想要发布一个程序最简单最安全的做法(不用担心用户电脑是否包含你所需要的库)就是把这个目录下面的相应的库的文件夹和你的可执行文件放在一起发布。
    比如在X86平台下如果你的可执行文件用到了CRT库(废话么),那么就拷贝Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT这个文件夹到你的程序所在的目录,一起发布,就万事大吉啦!

    转载于:https://www.cnblogs.com/gamesky/archive/2012/08/13/2636310.html

    展开全文
  • 要加上 force:true plus.runtime.install... // console.log('安装wgt文件成功!'); plus.nativeUI.alert('应用更新完成', function() { //'应用更新完成!' plus.runtime.restart(); });

    要加上 force:true

    			plus.runtime.install(
    				path, {force:true},
    				function() {
    					plus.nativeUI.closeWaiting();
    					// console.log('安装wgt文件成功!');
    					plus.nativeUI.alert('应用更新完成', function() {
    						//'应用更新完成!'
    						plus.runtime.restart();
    					});
    				},
    				function(e) {
    					plus.nativeUI.closeWaiting();
    					plus.nativeUI.alert('更新失败' + '[' + e.code + ']:' + e.message); //更新失败
    				}
    			);
    
    展开全文
  • Application Cache的配置文件 ...这个文件一般为.appcache类型,称为缓存清单(cache manifest)文件,一个完整的缓存清单文件如下: CACHE MANIFEST # version xx.xx.xx CACHE: needBeCached.pn...

    Application Cache的配置文件

    首先需要在服务器上建立一个文件,里面的内容确定了哪些文件需要缓存,哪些文件不需要,如果资源无法访问会使用什么页面等

    这个文件一般为.appcache类型,称为缓存清单(cache manifest)文件,一个完整的缓存清单文件如下:

    CACHE MANIFEST
    # version xx.xx.xx
    CACHE:
    needBeCached.png
    needBeCached2.js
    
    NETWORK:
    notNeedBeCached.html
    notNeedBeCached2.css
    
    FALLBACK:
    / 404.html
    

    可以看到,文件的头部信息CACHE MANIFEST用来标注这个文件是缓存清单文件,其后一般情况下(最好是)跟着一行标明版本的注释,这行注释非常重要,将在后面文件加载部分详细介绍这行注释的重要性

    CACHE部分

    除了头部信息,这个缓存清单文件分为几部分,第一部分为CACHE部分:

    CACHE:
    needBeCached.png
    needBeCached2.js
    

    这一部分标注了哪些资源文件需要被缓存可以列出多个

    如果有路径,如需要缓存blog下的blog.css文件,可以写成blog/blog.css

    另外CACHE:可以被省略,让需要缓存的资源文件直接跟在注释之后

    NETWORK部分

    第二部分为NETWORK部分:

    NETWORK:
    notNeedBeCached.html
    notNeedBeCached2.css
    

    这一部分定义了哪些文件不需要缓存,这些文件需要与服务器连接

    与CACHE一样,可以定义多个资源,而如果直接输入一个文件夹路径,也是合法的,比如/blog这样,blog文件夹下的所有文件都不会被缓存

    可以使用通配符来,如除了上面CACHE中定义的资源,其他都必须与服务器连接:

    NETWORK:
    *
    

    需要注意一点是,载有这个manifest文件的HTML文档将一定会缓存,这个会在后面再次提到

    FALLBACK部分

    第三部分为FALLBACK部分:

    FALLBACK:
    / 404.html
    

    这一部分指定了一个后备页面,当资源无法访问时,浏览器会使用该页面

    同样可以定义多条记录,每条记录列出两个URI,一个表示资源,一个表示后备页面。需要注意的是两个资源文件都需要使用相对路径切与manifest文件同源

    同样可以使用通配符

    保存和引用manifest文件

    manifest文件可以保存在服务器上,保存为.appcache后缀,但必须与应用本身同源。在HTML文档中,可以指定清单文件的相对路径和绝对URL。需要注意的是,manifest文件的MIME类型必须是text/cache-manifest

    需要在HTML文档中引入manifest文件,可以使用类似如下代码:

    <!doctype html>
    <html manifest="manifest.appcache">
    ...
    </html>
    

    这样,HTML文档加载后,就会根据manifest.appcache的内容来缓存资源文件,在下次访问相同页面的时候,会直接使用缓存的资源文件来进行加速

    缓存和加载机制

    在第一次访问时,浏览器加载完HTML文档后,会查看其是否有引入manifest文件。若引入,则加载manifest文件,然后根据manifest的文件内容进行资源的缓存,并缓存当前文档

    之后访问,浏览器首先会查看manifest文件是否被修改(无论是内容还是注释),如果被修改,将当做第一次访问,重新根据manifest文件内容进行缓存

    如果应用缓存存在,且manifest没有被修改,浏览器直接从缓存中加载文档(注意:加载文档)和资源,不会访问网络(注意:无论联网与否,都不会访问网络)

    在缓存多个资源文件时,浏览器下载资源文件会先放在一个临时的缓存中,如果有任何一个资源文件下载失败,浏览器将停止其他缓存资源的下载,并清除临时缓存。如果所有资源文件都被成功下载,浏览器将会把这些资源文件以及引用manifest文件的HTML文档移动到永久离线缓存中

    满满的都是坑

    一些小坑

    1. 需要注意的是manifest文件放在服务器上,MIME类型必须是text/cache-manifest,如果使用 Apache,需要修改.htaccess文件。IE下默认application/octet-stream,需要在服务器指定
    2. 每个需要缓存的页面的html都需要加入manifest属性
    3. 不要将manifest文件本身加入缓存,如果加入,浏览器将不会检测到服务器上manifest的更新,页面版本将万年不变
    4. 不要以为一个资源文件加载失败,其他文件就会被缓存,原因参见缓存和加载机制的最后一段

    一些大坑

    1. 在manifest文件中定义的资源全部被成功加载后,这些资源文件连同引用manifest文件的HTML文档一并被移动到永久离线缓存中。所以如果想只缓存js、css、图片等文件,而不希望缓存HTML文档以保持获得最新内容的情况来说,这就是个大坑
    2. 根据Application Cache的加载机制,如果仅仅修改资源文件的内容(没有修改资源文件的路径或名称),浏览器将直接从本地离线缓存中获取资源文件。所以在每次修改资源文件的同时,需要修改manifest文件,以触发资源文件的重新加载和缓存。这其中,最有效的方式是修改manifest文件内部的版本注释(所以说那句注释相当重要)
    3. 如果资源没有被缓存,在而没有设置NETWORK的情况下,将会无法加载(浏览器不会去网络上进行加载),所以需要使用通配符来表明除了CACHE中确定的资源以外,其他资源都需要去网络上加载

    使用iframe来避开一号坑?

    网上传言避开一号坑的方法是使用iframe来指定需要缓存的资源,而避开HTML文档的缓存。具体做法是在HTML中嵌入一个iframe,iframe中的页面的HTML标签包含manifest属性引用manifest文件,里面定义了需要缓存的文件。这样就会只缓存iframe中的HTML文档,而持续更新主页面:

    <!doctype html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>主页面</title>
        <link rel="stylesheet" href="css/style.css">
        <script src="js/javascript.js"></script>
    </head>
    <body>
        <iframe src="cache.html"></iframe>
    </body>
    </html>
    

    可以看到,主页面的html标签中,并没有引入manifest文件。只是在其中加载了一个iframe,而这个iframe所加载的页面文档如下:

    <!DOCTYPE html>
    <html manifest="manifest.appcache">
    <head>
        <meta charset=utf-8 />
        <title>缓存页面</title>
    </head>
    <body>
    </body>
    </html>
    

    缓存页面中引入了manifest文件,这样浏览器就会缓存manifest文件中定义的资源列表,比如这里manifest文件的内容如下:

    CACHE MANIFEST
    # VERSION 1.0
    
    CACHE:
    css/someStyle.css
    js/someJavaScript.js
    
    NETWORK:
    *
    

    在chrome中运行,可以在命令行中看到如下效果:

    Creating Application Cache with manifest http://localhost:8000/manifest.appcache
    Application Cache Checking event
    Application Cache Downloading event
    Application Cache Progress event (0 of 2) http://localhost:8000/css/someStyle.css
    Application Cache Progress event (1 of 2) http://localhost:8000/js/someJavaScript.js
    Application Cache Progress event (2 of 2)
    Application Cache Cached event 
    

    浏览器缓存了manifest文件中定义的资源文件,其实同时还缓存了iframe中的缓存页面的文档,但不会缓存主页面,修改一下主页面,并按F5刷新

    Document was loaded from Application Cache with manifest http://localhost:8000/manifest.appcache
    Application Cache Checking event
    Application Cache NoUpdate event 
    

    可以看到主页面被更新了,但是someStyle.css和someJavaScript.js文件依旧从网络上加载了,而没有从cache中加载。打开chrome的chrome://appcache-internals/可以看到,里面cache.html、someStyle.css、someJavaScript.js确实被缓存了,去掉NETWORK段,结果也是一样

    Flags       URL                                         Size (headers and data)
    Master,     http://localhost:8000/cache.html            388 B
    Explicit,   http://localhost:8000/css/someStyle.css     228 B
    Explicit,   http://localhost:8000/js/someJavaScript.js  244 B
    Manifest,   http://localhost:8000/manifest.appcache     316 B
    

    在firefox、opera上测试也是一样,虽然被缓存了,但依旧会从网络上加载,而iframe的解答方法也是2011~2012年左右提出的,后来就没有相关文章了,估计已经彻底失效了

     

    Application主要是为了构建离线缓存,使得页面在离线模式下也能浏览。这比较适合一些页面上的应用以及静态的不经常变更的页面。其会缓存载体页面也是由于其机制。如果上面iframe机制实现有错误,或是有其他方法只缓存资源不缓存HTML文档,也请联系我

    展开全文
  • manifest 文件作用

    千次阅读 2015-03-09 09:36:40
    这个便是从WINDOWS\WinSxS\Manifests目录下取出来的一个manifest文件,再这个文件夹下有一陀子这种XML格式的manifest文件,其是服务端的程序清单。WinSxs是windows XP以上版本提供的[blue]非托管并行缓存(side-by-...
  • manifest文件的常用配置项

    千次阅读 2017-04-17 22:04:14
    manifest文件的常用配置项接下来,我们介绍一下manifest文件中几个常用的配置项。每个配置项都有一个对应的命令行参数,同时,命令行参数的优先级是高于manifest文件中的配置项。一个典型的Java / SpringBoot应用...
  • Windows Manifest文件简介

    千次阅读 2017-07-20 18:52:32
    Manifest文件 什么是.manifest 文件 [现象] 对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能...
  • Rocksdb 数据库--MANIFEST文件

    千次阅读 2017-09-27 11:15:17
    MANIFESTrocksdb 是一个与存储介质无关的文件系统,文件系统的操作不是原子操作,所以在系统失败后,很容易导致文件的不一致,尽管后来随着日志记录的出现,但是也没有办法保证长期运行期间文件数据的一致性,POSIX
  • 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息。个人理解,MANIFEST.MF文件是jar文件运行依赖的入口,...
  • 标签实现文件下载并对文件进行重新命名,遇到了一些问题,文件重命名一直失败,所幸最终还是解决了,在此记录一下,避免后来者踩坑。 HTML <a> 元素可以创建一个到其他网页、文件、同一页面内的位置、电子...
  • 失败原因:请在manifest.json文件中获取新的AppID 解决方法: 去到自己的小程序里面,把AppID复制到manifest.json里面即可。 如果没有小程序AppID,去官网注册一个就有了。 欢迎关注微信公众号【web前端开发宝典】...
  • 1.wgt不能文件重名 保证保存路径下的wgt名称唯一,可每次下载都创建一个名称唯一的文件夹来储存,避免重复。如用当前长整数类型的时间值作为文件名。 plus.downloader.createDownload( url, { filename: '_doc...
  • Error:Execution failed for task ‘:app:processDebugManifest’.> Manifest merger failed with multiple errors, see logs异常提示:清单文件合并失败 异常情形描述:更换极光推送的JPUSH_APPKEY导致(或在其他...
  • 第一种: .1.清理解决方案-->重新生成解决方案.或者类似操作. ...2.关闭工程,删除掉debug目录,pbd文件,重新打开工程,重新生成. 第二种: 项目属性-》配置属性-》linker-》“是否启动增量链接”设置为no
  • 所以我们可以通过修改manifest文件来控制应用程序的运行权限,以下为外置和内置两种清单文件的修改方法: 外置同名manifest文件 以软件“ 一号店在线客服 ”为例,软件安装后,修改程序目录(C:\Program Files (x86)...
  • 其他机型可以,小米手机下载失败,提示读写权限不足。然后发现小米需要读写权限都有,和权限组的理论相悖,所以要做如下处理 ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_...
  • Android在打包的时候会合并清单文件,这里需要知道合并的原理,本文以 https://developer.android.com/studio/build/manifest-merge 官方文档为参考,进行翻译解读。同时也为自己记录相应的知识点。 合并优先级 ...
  • 利用manifest文件对程序目录下的dll进行分类 1 背景  对于大部分的券商和机构投资者,只能通过有交易所交易系统接入资质的券商提供的柜台系统来进行现货交易。相对于期货市场,现货市场的柜台系统千差万别...
  • 今天突然发现在Pom文件中进行相关的设置,可以将自己所依赖的jar包在Manifest文件中展示出来;感觉挺有趣,就自己实验了一把。 【有趣的实验】 1、进行相关的实验,在Pom文件中plugins--->plugin--->co...
  • 这是我在做HBuilder自动更新时候遇到的,很奇怪,我是配置了Maps模块的,但为什么还会出现这个问题 在SDK上随便配置一个ID,即可解决 转载于:https://www.cnblogs.com/erph/p/9323216.html...
  • www.anbobo.top/Unity读取Package文件夹中的manifest.json文件
  • 解决github下载代码总是失败的问题

    千次阅读 多人点赞 2020-02-13 13:55:06
    码云 2.创建仓库 3.在新建仓库页选择 “导入已有仓库” 4.复制你需要下载的git链接,如https://github.com/lehaifeng/T-GCN.gi放到导入已有仓库中 5.点击创建,然后下载 ...下载zip,速度飞起~~~~ ...
  • 安装apk的时候总是不能...Installation failed with message INSTALL_PARSE_FAILED_MANIFEST_MALFORMED. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is pre...
  • Manifest.json文件以下节点配置错误,请检查修复 manifest.plus.distribute.icons.android.hdpi 文件不存在 manifest.plus.distribute.icons.android.ldpi 文件不存在 manifest.plus.distribute.icons.android.mdpi ...
  • 参考一:HTML5离线缓存Manifest...参考二:https://m.jb51.net/html5/438218.html(这篇文章的 manifest 配置文件例子少了一句 CACHE 代码,会导致缓存是表白) manifest 的作用: 简单来说manifest能让你的应...
  • } // 下载文件 export const downloadFile = (url) => new Promise((resolve) => { let res = { err: true, msg: '下载失败!', data: '' }; uni.downloadFile({ url, header: { 'Account-Token': ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,585
精华内容 11,834
关键字:

下载manifest文件失败

友情链接: qqvc.rar