0

私は最近、Adobe Airで表示していたPDFで印刷機能を呼び出す方法を探していました。この仲間の助けを借りて、この問題を解決し、PDF でpostMessageを次のように呼び出しました。

//this is the HTML I use to view my PDF
<object id="PDFObj" data="test.pdf" type="application/pdf"/>

...
//this actionscript lives in my air app
var pdfObj:Object = htmlLoader.window.document.getElementById("PDFObj");
pdfObj.postMessage([message]);

私はJavaScriptでもこれを試しました.Adobeが忍び込んで私を助けていないことを確認するためです...

var obj = document.getElementById("PDFObj");
obj.postMessage([message]);

JavaScript と ActionScript でうまく機能します。

MDCが postMessage について何と言っているか調べてみましたが、window.postMessage しか見つかりませんでした。

これで、コードは魔法のように機能し、postMessage は魔法のようにメッセージを PDF に埋め込まれた JavaScript に送信します。ただし、これをどのように行っているかはまだわかりません。

Adobe がこの方法について話しているのを見つけましたが、実際には説明していません。

HTML-PDF 通信の基本
HTML ページ内の JavaScript は、PDF コンテンツを表す DOM オブジェクトの postMessage() メソッドを呼び出すことによって、PDF コンテンツ内の JavaScript にメッセージを送信できます。

これがどのように達成されるかについてのアイデアはありますか?

4

1 に答える 1

3

「postMessage」は、基本的に JavaScript のパブリッシュ/サブスクライブ モデルの半分です。

好きなメッセージを投稿できますが、そのメッセージ イベントをリッスンする何かに依存しています。したがって、あなたの postMessage は本質的に、フェンスを越えてイベントをスローすることであり、反対側で何かがイベントで何かをするのを待っていることを期待しています。フェンスの反対側には、(できれば) 次のようなイベント リスナーがあります。

window.addEventListener("message", doSomethingWithTheMessage, false);

function doSomethingWithTheMessage(event) {
    alert("Do Something!");
}

詳細はこちら: https://developer.mozilla.org/en/DOM/window.postMessage

あなたの特定の例では、PDF、Flash、またはそれらの線に沿ったものなどのオブジェクトを埋め込むと、まさにこの方法でイベントをリッスンする可能性があります。

于 2010-03-08T15:55:35.383 に答える