選擇要分享的資料格式 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
不論您正在撰寫可幫助使用者分享內容的來源應用程式,或是可接收該內容的目標應用程式,都應該花一些時間考量您要支援哪些資料格式與檔案類型。我們將在此描述 Windows.ApplicationModel.DataTransfer 命名空間支援的標準格式,以及如何在標準格式不適用時建立和使用自訂格式。
選擇來源應用程式的資料格式
如果您正在撰寫來源應用程式,您只能使用一種資料格式或檔案類型。有的格式可能比其他格式更有意義,因此,以其他格式提供相同的資料有助於確保使用者可利用他們選擇的目標應用程式來分享資料。例如,如果使用者想分享格式化文字 (例如來自網頁的格式化文字),您也可以提供純文字版的內容,因為不是每一種目標應用程式都支援格式化文字。
注意 您所支援的其他格式數目,取決於使用者可能會分享的內容類型。您必須考量是什麼內容,還有使用者分享內容時有什麼期待。例如,建立格式化文字的純文字版通常是合理的。不過,建立包含該文字的網頁連結則可能並非使用者所期待的。
**範例案例:**使用者想要分享在您的應用程式閱讀到的文章。如果網路上有提供這篇文章的內容,請先包含文章連結。此外,您還應該包含文章摘要的連結,該連結必須連結回 HTML 格式和文字格式的來源。
**範例案例:**使用者想要分享您應用程式中文章的選取內容。在此案例中,HTML 格式最能夠正確反映使用者的企圖。您也應該包含使用者選取內容的文字版本。達成此目標的建議方法是使用 MSApp.createDataPackageFromSelection。
下表可幫助您決定來源應用程式應該支援哪些格式。
應用程式支援的主要資料類型 | 建議的主要 DataPackage 格式 | 其他建議 |
---|---|---|
未格式化的純文字 | 文字 | WebLink,如果該文字是網頁連結。 |
連結 | WebLink | 文字 |
格式化內容/HTML | HTML | 文字,如果內容只包含文字。 WebLink,如果該內容是連結。 |
檔案 | StorageItems | |
單一影像 | StorageItems | |
多個檔案與影像 | StorageItems |
同時還支援自訂格式,以因應當您想要指定比標準格式更具體的格式時。這些自訂格式可以標準資料結構描述為基礎 (例如可在 http://www.schema.org 上找到的格式),或是您專為自己的應用程式定義的格式。
選擇目標應用程式的資料格式
對於目標應用程式,建議您盡可能支援多種格式類型。這有助於確保應用程式可順利被使用者分享。不過,就像來源應用程式一樣,如果您不打算收到特定類型的資料,就不要支援這種格式。例如,只接受文字的應用程式不應該將其登錄為支援點陣圖。
以下是建議您支援的一些格式。
應用程式支援的主要資料類型 | 建議的主要 DataPackage 格式 | 其他建議 |
---|---|---|
未格式化的純文字 | 文字 | |
連結 | WebLink | 文字 |
格式化內容/HTML | HTML | |
檔案 | StorageItems | |
單一影像 | StorageItems | |
多個檔案與影像 | StorageItems | |
特定檔案類型 (例如 .docx) | 含特有副檔名的 StorageItems |
如果應用程式可支援多種格式,而這些格式均出現在即將分享的內容中,建議您只處理與您的應用程式最相關的格式。例如,假設您的應用程式要分享連結,而應用程式收到的分享內容含有一個連結與一些文字,則您應該只處理該連結。
有時候,應用程式想要收到比標準格式所提供的資訊更多的詳細資訊。例如,圖書館應用程式想要收到只包含書籍資訊的文字。 在這類情況下可支援自訂格式。這些自訂格式可以標準資料結構描述為基礎 (例如可在 http://www.schema.org 上找到的格式),或是您專為自己的應用程式定義的格式。
使用結構描述格式
在許多情況下,您想要分享的資料 (做為來源目標應用程式或做為目標應用程式) 會比標準格式提供的資料更加明確。例如,以影片為主的應用程式會想要分享影片的相關資訊,例如片名、評等、導演等的詳細資料。以書籍為主的應用程式會想要分享書籍的相關資訊、包括作者、書名以及發行日期。如果是屬於這類型的應用程式,建議您支援 http://www.schema.org 所列的其中一種結構描述。
如果您想要使用這些結構描述的其中之一來分享資料,做法如下所示:
- 識別使用者想要分享的項目 (書籍、影片等)。
- 收集與項目相關的資訊,然後使用 JavaScript 物件標記法 (JSON) 格式來封裝它。
- 使用 setData 將內容新增到 DataPackage。當您這樣做時,必須包含一個格式識別碼。目前請使用
http://schema.org/<schema>
做為識別碼。例如,http://schema.org/Book
。
此範例說明如何以自訂格式分享資料。
var book = {
"type" : "http://schema.org/Book",
"properties" :
{
"image" : "http://sourceurl.com/catcher-in-the-rye-book-cover.jpg",
"name" : "The Catcher in the Rye",
"bookFormat" : "http://schema.org/Paperback",
"author" : "http://sourceurl.com/author/jd_salinger.html",
"numberOfPages" : 224,
"publisher" : "Little, Brown, and Company",
"datePublished" : "1991-05-01",
"inLanguage" : "English",
"isbn" : "0316769487"
}
};
book = JSON.stringify(book);
function shareCustomData() {
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", function (e) {
var request = e.request;
request.data.setData("http://schema.org/Book", book);
});
}
請注意,我們只在 DataPackage 中放置單一資料格式。這樣做時,任何使用者選擇的目標應用程式均可知道應使用的格式。
如果想要接收使用其中一種結構描述的資料,您必須遵循以下步驟:
- 編輯套件資訊清單,宣告應用程式是共用目標。若要了解如何執行這項動作,請參閱快速入門。
- 在套件資訊清單中,新增可識別應用程式支援之結構描述的資料格式。使用
http://schema.org/<schema>
做為資料格式。例如,http://schema.org/Book
。 - 使用 getDataAsync 以從在分享作業期間收到的 DataPackageView 物件中取得內容。
此範例說明如何接收以自訂格式分享的資料。
if (shareOperation.data.contains("http://schema.org/Book")) {
shareOperation.data.getTextAsync(("http://schema.org/Book").done(function (customFormatString) {
var customFormatObject = JSON.parse(customFormatString);
if (customFormatObject) {
// This sample expects the custom format to be of type http://schema.org/Book
if (customFormatObject.type === "http://schema.org/Book") {
customFormatString = "Type: " + customFormatObject.type;
if (customFormatObject.properties) {
customFormatString += "\nImage: "
+ customFormatObject.properties.image
+ "\nName: " + customFormatObject.properties.name
+ "\nBook Format: " + customFormatObject.properties.bookFormat
+ "\nAuthor: " + customFormatObject.properties.author
+ "\nNumber of Pages: " + customFormatObject.properties.numberOfPages
+ "\nPublisher: " + customFormatObject.properties.publisher
+ "\nDate Published: " + customFormatObject.properties.datePublished
+ "\nIn Language: " + customFormatObject.properties.inLanguage
+ "\nISBN: " + customFormatObject.properties.isbn;
}
}
}
});
}
使用自訂格式
如果您在 http://schema.org/docs/full.htm 中找不到符合應用程式需求的結構描述,您也可以選擇建立自己的自訂格式。如果您決定那樣做,必須記住一些重點:
- 自訂格式的名稱很重要。來源應用程式與目標應用程式必須使用相同的名稱。
- 您必須發佈格式。如此一來,想使用該格式的開發人員就知道要如何封裝內容。
請參閱建立自訂資料格式的指導方針,其中涵蓋上述與其他考量的詳細資料。