完全披露:我是Offline Pages Pro应用程序的开发者。
这听起来像json文件没有预先缓存,因此任何试图在离线时获取它们都会失败。
这可能是因为代码的组织方式。离线页面不可能通过多个函数调用推导出所有可能的currentKey变量值。为了解决这个问题,您需要采取主动行动,并确保通过向您的网站添加特殊标记来预先缓存json文档。
以下是您在离线页面中如何使用它的方法。
首先,您需要创建一个XML文档(例如offline.xml
)来声明您的Ajax请求。将文档存储在您网站的任何地方。选择以下任何选项来声明Ajax请求。确保用您的实际主机名替换yourdomain.com
。
OPTION 1 - 明确列出您的JSON文件,按照各自的<addResource>
元素:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE rules PUBLIC "-//CODIUMLABS//DTD RULES 1.0//EN" "http://codiumlabs.com/dtd/rules-1.0.dtd">
<rules domain="yourdomain.com">
<rule>
<addResource uri="json/key1.json" type="text/json" ajax="true" />
<addResource uri="json/key2.json" type="text/json" ajax="true" />
<addResource uri="json/key3.json" type="text/json" ajax="true" />
</rule>
</rules>
OPTION 2 - 使用序列号只命名json/key1.json
,json/key2.json
等这样你需要一个<addResource>
元件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE rules PUBLIC "-//CODIUMLABS//DTD RULES 1.0//EN" "http://codiumlabs.com/dtd/rules-1.0.dtd">
<rules domain="yourdomain.com">
<rule>
<addResource uri="json/key{1-20}.json" type="text/json" ajax="true" />
</rule>
</rules>
OPTION 3 - 使用存储在data-key
属性的<div>
元素中的键值。这可能是最好的选择。如果您还没有,请将您的密钥置于数据属性中,例如:<div data-key="key1"></div>
。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE rules PUBLIC "-//CODIUMLABS//DTD RULES 1.0//EN" "http://codiumlabs.com/dtd/rules-1.0.dtd">
<rules domain="yourdomain.com">
<rule>
<addResource uri="json/{div[data-key]}.json" type="text/json" ajax="true" />
</rule>
</rules>
最后,在你的页面代码的引用添加到您的offline.xml
的<head>
的元素:
<link rel="offlinepages-rules" type="application/vnd.offlinepages.rules+xml" href="offline.xml" />
如果你正确地实现上述变化,离线页面将检测<link>
元素,下载offline.xml
,并使用你的Ajax声明来预先缓存所有的json文件。
感谢您的回复。我发现离线页面是一个非常有用的工具。但在我的情况下,我已经解决了这个问题,其中包括文件名中的空格。当你意识到的时候真的很简单,但花了我很多时间去了解这一点! – GilesJ