Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #10 from CatChen/master

replaced rel="download" with download="filename.ext"
  • Loading branch information...
commit 4f32cd73bc60b23c17f8519650029c63ba3fc291 2 parents 7014906 + 300f716
@CatChen CatChen authored
View
24 Doraemon/Download Link.md
@@ -2,19 +2,25 @@
## 概述
-这个文档说明豌豆荚百宝袋如何识别下载链接,以及如何从下载链接中提取目标文件的相关信息(meta data)。
+这个文档说明豌豆荚 Windows 版百宝袋如何识别下载链接,以及如何从下载链接中提取目标文件的相关信息(meta data)。
-一个典型的百宝袋下载链接应该是这样子的:(请注意提供给豌豆荚使用的参数键值对放在 `#` 井号后面,而非 `?` 问号后面。)
+一个典型的百宝袋下载链接应该是这样子的:(请注意提供给豌豆荚 Windows 版使用的参数键值对放在 `#` 井号后面,而非 `?` 问号后面。)
<a href="app.apk#name=app&image=%2Fimages%2Fapp-icon.png" rel="download">Download</a>
-豌豆荚百宝袋会对 `a` 标签中的如下信息作出响应:
+豌豆荚 Windows 版百宝袋会对 `a` 标签中的如下信息作出响应:
+
+## download="filename.ext"
+
+`download="filename.ext"` 属性向豌豆荚表明这个链接的目标用于下载,同时给出下载时所建议使用的文件名。
+
+在一般情况下,豌豆荚会根据链接目标内容的 content-type 属性做出判断,到底应该是下载还是直接展示。但如果要想要下载的内容是纯文本或者 HTML,豌豆荚的默认行为会是直接展示,这时候可以通过 `download="filename.ext"` 来提示豌豆荚将默认行为变更为下载,同时通过属性取值(`"filename.ext"` 部分)给出建议使用的文件名。对于默认行为已经是下载的链接目标,这个属性同样能用于给出建议使用的文件名。
## rel="download"
-`rel="download"` 属性向豌豆荚客户端表明这个链接的目标用于下载。
+_DEPRECATED!_
-在一般情况下,豌豆荚客户端会根据内容的 content-type 属性做出判断,到底应该是下载还是直接展示。但如果要想要下载的内容是纯文本或者 HTML,豌豆荚的默认行为会是直接展示,这时候就需要通过 `rel="download"` 来提示豌豆荚将默认行为变更为下载
+`rel="download"` 是一个已经不再建议使用的属性,它曾经的作用与 `download="filename.ext"` 相似,用于向豌豆荚声明链接目标应该用于下载而非直接显示
## href="...\#key1=value1&key2=value2"
@@ -30,13 +36,13 @@
名称。会显示在资源管理界面和下载任务管理器。
-如果下载链接所在的网页上使用了 micro-format,在锚点不提供 `name` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=name]` 元素上获取。
+如果下载链接所在的网页上使用了 microdata,在锚点不提供 `name` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=name]` 元素上获取。
### image
图标。会显示在资源管理界面和下载任务管理器。
-如果下载链接所在的网页上使用了 micro-format,在锚点不提供 `image` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=image]``*[itemprop=thumbnail] *[itemprop=image]``*[itemprop=thumbnailUrl]` 元素上获取。
+如果下载链接所在的网页上使用了 microdata,在锚点不提供 `image` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=image]``*[itemprop=thumbnail] *[itemprop=image]``*[itemprop=thumbnailUrl]` 元素上获取。
### content-type
@@ -46,7 +52,7 @@
文件体积。文件在下载过程中如果提供了 HTTP header 的 `content-length` 属性,则以 HTTP header 属性为准。文件下载后,以实际存储的文件体积为准。会显示在资源管理界面和下载任务管理器。
-如果下载链接所在的网页上使用了 micro-format,在锚点不提供 `content-length` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=fileSize]``*[itemprop=contentSize]` 元素上获取。
+如果下载链接所在的网页上使用了 microdata,在锚点不提供 `content-length` 属性时,该属性从同一个 `itemscope` 内的 `*[itemprop=fileSize]``*[itemprop=contentSize]` 元素上获取。
### content-disposition
@@ -58,6 +64,8 @@
文件名。豌豆荚在考虑文件保存为什么文件名时,会参考这一参数。如果这一参数不是系统(豌豆荚 Windows 版需要同时考虑 Windows 和 Android)有效的文件名,则豌豆荚会做出必要的调整。
+需要注意的是,在 `filename` 设置的文件名会覆盖在 `download` 设置的文件名,但 HTTP header 设置的文件名依然有最高优先级。
+
#### filepath
文件路径。豌豆荚在考虑文件保存路径时,会参考这一参数。由于下载资源是提供给 Android 设备使用的,所以这里的文件路径应该基于 Android 文件系统。
View
2  Microdata/microdata-to-download-link-processor-demo.html
@@ -6,7 +6,7 @@
</head>
<body>
<div itemscope itemtype="http://schema.org/SoftwareApplication" class="download">
- <img itemprop="image" src="https://ssl.gstatic.com/android/market/com.zeptolab.ctr.paid/hi-124-11" />
+ <img itemprop="image" src="https://ssl.gstatic.com/android/market/com.zeptolab.ctr.paid/hi-124-11" alt="" />
<a itemprop="url" href="">
<span itemprop="name">Cut the Rope</span>
(<span itemprop="softwareVersion">1.3</span>)
View
5 Microdata/microdata-to-download-link-processor.js
@@ -45,6 +45,7 @@
hashArray.push(key + '=' +hash[key]);
}
+ /* TODO: support itemid */
link.hash = '#' + hashArray.join('&');
}
};
@@ -65,6 +66,7 @@
if (getNearestScopeElement(propElement) === scopeElement) {
var itemProp = getItemProp(propElement);
if (itemProp.key) {
+ /* TODO: need to add multiple values support instead of simple overriding existed key */
directItemProps[itemProp.key] = itemProp.value;
}
}
@@ -76,6 +78,7 @@
/* see Microdata standard for how to extract value from element: http://www.w3.org/TR/microdata/#values */
var property = {};
property.node = propElement;
+ /* TODO: support multiple keys within one itemprop attribute */
property.key = propElement.getAttribute('itemprop');
if (propElement.hasAttribute('itemscope')) {
@@ -109,7 +112,7 @@
property.value = propElement.value;
break;
case 'TIME':
- property.value = propElement.getAttribute('datetime');
+ property.value = propElement.getAttribute('datetime') || propElement.textContent;
break;
default:
property.value = propElement.textContent;
Please sign in to comment.
Something went wrong with that request. Please try again.