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 回答