如何接收文本 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
文本或许是用户共享的所有数据格式中最常见的格式。除了是状态更新等内容的首选之外,文本还是共享链接、HTML 和其他信息的应用的一个建议选项。
编写状态应用时,你通常应当支持文本作为共享的一部分。这确保用户可以在更广泛的情形下选择你的应用。也就是说,如果你认为文本仅会使用户困惑,就不要支持文本。例如,如果你的应用大多处理文件,那么这些文件的文本表述将不会符合用户期望。
你需要了解的内容
技术
先决条件
- 你应当熟悉 Visual Studio 及其关联模板。
- 你应当熟悉 JavaScript。
说明
步骤 1: 支持“共享”合约
你必须首先声明你的应用支持“共享”合约,然后你的应用才能接收共享内容。此合约从根本上让系统知道你的应用可用于接收内容。如果你使用 Microsoft Visual Studio 模板创建应用,以下是支持“共享”合约的方法:
- 打开清单文件 (package.appxmanifest)。
- 打开“声明”选项卡。
- 从“可用声明”列表中,选择“共享目标”。****
- 单击“添加”****以在应用中添加到对共享目标协定的支持。
步骤 2: 指定你的应用支持文本
编写目标应用时,你可以同时指定文件类型和格式。若要指定你支持的文件类型,请执行以下操作:
- 打开清单文件。
- 在“支持的文件类型”部分中,单击“新增”****。
- 键入 .txt。你需要在 txt 之前(而不是之后)包括句点 (.)。
若要指定你支持数据格式的文本,请执行以下操作:
- 打开清单文件。
- 在“数据格式”部分中,单击“新增”****。
- 键入"文本"(不包含引号)。
前面的步骤将以下部分添加到清单中:
<Extensions>
<Extension Category="windows.shareTarget">
<ShareTarget>
<DataFormat>text</DataFormat>
</ShareTarget>
</Extension>
</Extensions>
注意 当为共享目标协定激活你的应用时,你可以指定一个不同的输入点。若要完成此操作,请在程序包清单中的“共享目标”声明的“应用设置”部分中修改“起始页”条目。****强烈建议你还使用一个单独的 JavaScript 文件来处理此页面的激活。例如,检查共享内容目标应用示例。
步骤 3: 添加要用来检测应用在何时激活的事件处理程序。
当用户选择你的应用来共享内容时,系统会激活你的应用。由于可通过许多方式实现该操作,因此你需要添加用来检测激活原因的代码。这可通过检查 kind 属性的值来完成。
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
// The application has been launched. Initialize as appropriate.
} else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
...
}
};
步骤 4: 获取 ShareOperation 对象。
ShareOperation 对象包含你的应用为了获取用户要共享的内容而所需的全部数据。
shareOperation = args.detail.shareOperation;
步骤 5: 快速从已激活的事件处理程序返回。
activated 事件处理程序必须快速返回。将 activated 事件处理程序中的某个异步事件排入队列,这样共享数据处理会在已激活事件返回后发生。
WinJS.Application.addEventListener("shareready", shareReady, false);
WinJS.Application.queueEvent({ type: "shareready" });
剩下的步骤将实现 shareReady
函数。
步骤 6: 查明共享数据是否包含文本。
shareOperation.data 属性包含一个 DataPackageView 对象。DataPackageView 对象本质上是源应用在创建数据时所使用的 DataPackage 对象的只读版本。使用此对象来查明是否以文本格式提供正在共享的内容。
if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
// Code to process text goes here.
}
检查 DataPackage 是否包含你感兴趣的数据格式是很好的做法,即使你的应用仅支持一种格式也是如此。 这更便于在以后支持其他数据格式。
步骤 7: 处理文本。
要获取文本,请调用 DataPackageView.getText 方法。
shareOperation.data.getTextAsync().done(function (text) {
// To output the text using this example,
// you need a div tag with an id of "output" in your HTML file.
document.getElementById("output").innerText = text;
});
当然,你对文本进行的处理取决于你的应用。
步骤 8: 调用 reportCompleted。
在你的应用成功完成共享内容之后,请调用 reportCompleted。在你调用此方法之后,系统会关闭你的应用。
shareOperation.reportCompleted();
备注
检查我们的共享内容目标应用示例代码示例以了解应用作为共享的一部分接收文本的整个端对端体验。
var shareOperation = null;
function shareReady(args) {
if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
shareOperation.data.getTextAsync().done(function (textValue) {
// To output the text using this example, you need a div tag with an
// id of "output" in your HTML file.
document.getElementById("output").innerText = textValue;
});
}
}
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
// The application has been launched. Initialize as appropriate.
args.setPromise(WinJS.UI.processAll());
} else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
// This app has been activated share.
args.setPromise(WinJS.UI.processAll());
// We receive the ShareOperation object as part of the eventArgs.
shareOperation = args.detail.shareOperation;
// We queue an asychronous event so that working with the ShareOperation object
// does not block or delay the return of the activation handler.
WinJS.Application.addEventListener("shareready", shareReady, false);
WinJS.Application.queueEvent({ type: "shareready" });
}
};
相关主题
Windows.ApplicationModel.DataTransfer