HTML을 공유하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

HTML 콘텐츠 공유는 텍스트, 링크 등의 다른 기본 형식과는 다릅니다. 사용자가 선택하는 콘텐츠는 다른 요소에 대한 참조를 포함할 수 있습니다. HTML 공유를 지원하는 앱은 이러한 참조를 처리하여 사용자가 원하는 콘텐츠를 공유하는지 확인하는 방법을 고려해야 합니다.

HTML 공유 문제를 설명하는 일반적인 경우로는 텍스트와 이미지를 모두 포함하는 콘텐츠가 있습니다. 사용자는 이 콘텐츠를 선택하고 공유 참 메뉴를 탭할 때 텍스트와 이미지를 모두 공유할 것을 기대합니다. 그러나 HTML에는 이미지가 포함되어 있지 않으며 대신 이미지가 있는 위치를 가리키는 img 태그가 포함되어 있습니다. 대상 앱이 로컬에 저장된 이미지와 같은 이미지 참조에 액세스할 수 없는 경우 리소스 맵을 설정해야 합니다.

사용자가 원하는 방식으로 HTML을 공유할 수 있도록 Windows.ApplicationModel.DataTransfer 네임스페이스에는 이미지 등과 같은 참조되는 요소를 캡처할 수 있는 몇 가지 함수가 포함되어 있습니다. 방법을 보여 드리겠습니다.

알아야 할 사항

기술

사전 요구 사항

  • Visual Studio 및 관련 템플릿을 잘 알고 있어야 합니다.
  • JavaScript에 대해 잘 알고 있어야 합니다.
  • JavaScript를 사용하여 사용자가 선택한 HTML을 식별하고 해당 선택 항목에서 img 태그와 같은 하위 요소의 인스턴스를 찾는 방법을 알고 있어야 합니다.

지침

단계 1: 앱을 공유 소스로 설정

DataTransferManager 개체는 모든 공유 작업의 주요 시작점입니다. 사용자가 공유를 호출하려고 하면 실행되는 DataRequested 이벤트 처리기를 추가합니다. Windows 스토어 앱에서는 사용자가 공유 참 메뉴를 호출하면 자동으로 실행됩니다. Windows Phone용으로 개발하는 경우에는 기본 제공 공유 참 메뉴가 없으므로 사용자가 처리기를 탭하여 트리거하는 컨트롤을 추가해야 합니다.

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareHtmlHandler);

나머지 단계는 shareHtmlHandler 함수를 구현하기 위한 것입니다.

단계 2: DataRequest 개체 가져오기

datarequested 이벤트가 발생하면 앱이 DataRequest 개체를 받습니다. 이 개체에는 사용자가 공유하려는 콘텐츠를 제공하는 데 사용할 수 있는 DataPackage가 포함되어 있습니다.

var request = e.request;

단계 3: 제목 및 설명 속성 설정

request.data.properties.title = "Share Html Example";
request.data.properties.description =
    "Demonstrates how to share an HTML fragment with a local image.";

단계 4: createHtmlFormat 메서드를 사용하여 조각 서식 지정

createHtmlFormat 함수는 시스템에서 콘텐츠를 공유하는 데 필요한 머리글 및 기타 정보를 사용하여 HTML 형식을 래핑합니다.

var localImage = "ms-appx:///images/logo.png";
var htmlExample = "<p>Here is a local image: <img src=\"" + localImage + "\">.</p>";
var htmlFormat = 
    Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.createHtmlFormat(htmlExample);

단계 5: DataPackage에 HTML 추가

HTML을 추가하려면 setHtmlFormat 함수를 사용합니다.

request.data.setHtmlFormat(htmlFormat);

단계 6: 로컬 이미지의 RandomAccessStreamReference 만들기

var streamRef = 
    Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new Windows.Foundation.Uri(localImage));

단계 7: 리소스 맵에 RandomAccessStreamReference 추가

이미지 파일을 추가하려면 resourceMap 속성을 사용합니다.

request.data.resourceMap[localImage] = streamRef;

공유하려는 HTML 조각에 여러 개의 로컬 이미지가 포함되어 있으면 각 로컬 이미지에 대해 이 단계를 반복해야 합니다.

전체 예제

다음은 사용자에 대해 공유할 HTML을 설정하는 함수의 예를 보여 줍니다. 자세한 예를 보려면 코드 갤러리 샘플(영문)을 참조하세요.

function shareHtmlHandler(e) {
    var localImage = "ms-appx:///images/logo.png";
    var htmlExample = "<p>Here is a local image: <img src=\"" + localImage + "\">.</p>";
    var request = e.request;
    request.data.properties.title = "Share Html Example";
    request.data.properties.description = "Demonstrates how to share an HTML fragment with a local image.";
    var htmlFormat = Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.createHtmlFormat(htmlExample);
    request.data.setHtmlFormat(htmlFormat);
    var streamRef = Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new Windows.Foundation.Uri(localImage));
    request.data.resourceMap[localImage] = streamRef;
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // This app is newly launched; register the app as a share source.
            var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
            dataTransferManager.addEventListener("datarequested", shareHtmlHandler);
        } else {
            // TODO: This app was reactivated from suspension.
            // Restore the app state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};

관련 항목

콘텐츠 공유 원본 앱 샘플

데이터 공유 및 교환

파일을 공유하는 방법

링크를 공유하는 방법

텍스트를 공유하는 방법

빠른 시작: 콘텐츠 공유

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share