テキストを受け取る方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
ユーザーが共有するすべてのデータ形式の中で最もよく使われるのは、おそらくテキストでしょう。状態の更新などのコンテンツ向けに真っ先に選ばれるほか、リンク、HTML、その他の情報を共有するアプリのオプションとしてもお勧めします。
ターゲット アプリを作成するときは、通常、共有の一環としてテキストをサポートするようにします。これにより、アプリがさまざまな状況でユーザーに選ばれるようにすることができます。ただし、ユーザーが混乱するだけと思われる場合は、テキストをサポートしないでください。たとえば、アプリで主にファイルが扱われる場合、ファイルのテキスト表現はユーザーの期待に沿いません。
理解しておく必要があること
テクノロジ
必要条件
- Visual Studio と関連するテンプレートについて理解している必要があります。
- JavaScript について理解している必要があります。
手順
ステップ 1: 共有コントラクトをサポートする。
アプリで共有コンテンツを受け取るには、事前に共有コントラクトのサポートを宣言する必要があります。このコントラクトを使うと、基本的に、アプリがコンテンツを受け取れることをシステムに通知できます。Microsoft Visual Studio テンプレートを使ってアプリを作る場合は、次の手順に従って共有コントラクトをサポートします。
- マニフェスト ファイル (package.appxmanifest) を開きます。
- [宣言] タブを開きます。
- [使用可能な宣言] ボックスの一覧の [共有ターゲット] を選びます。
- [追加] をクリックして、アプリに共有ターゲット コントラクトのサポートを追加します。
ステップ 2: アプリがテキストをサポートすることを指定する。
ターゲット アプリを作成するときに、ファイルの種類と形式の両方を指定することができます。サポートするファイルの種類を指定するには、次の操作を実行します。
- マニフェスト ファイルを開きます。
- [サポートされるファイルの種類] セクションで、[新規追加] をクリックします。
- 「.txt」と入力します。ピリオド (.) を忘れないように注意してください。"txt" の前にのみ入力します。
アプリがデータ形式としてテキストをサポートすることを次のように指定します。
- マニフェスト ファイルを開きます。
- [データ形式] セクションで、[新規追加] をクリックします。
- 「"text"」と入力します。
ここまでの手順によって、マニフェストに次のセクションが追加されます。
<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 イベント ハンドラーは、すばやく戻る必要があります。activated イベント ハンドラーからの非同期イベントをキューに入れ、activated イベントから戻った後に共有データの処理が行われるようにします。
WinJS.Application.addEventListener("shareready", shareReady, false);
WinJS.Application.queueEvent({ type: "shareready" });
残りの手順では、shareReady
関数を実装します。
ステップ 6: 共有データにテキストが含まれているか確認する。
shareOperation.data プロパティには DataPackageView オブジェクトが含まれています。このオブジェクトは、基本的に、ソース アプリがデータの作成に使った DataPackage オブジェクトを読み取り専用にしたものです。このオブジェクトを使って共有されたコンテンツがテキスト形式で利用できるか確認します。
if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
// Code to process text goes here.
}
アプリで 1 つの形式しかサポートしていないとしても、目的のデータ形式が 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