javascript - 当在 html 对象标签上调用 JS 函数 'postMessage()' 时,它会做什么?

标签 javascript html actionscript-3 pdf object-tag

我是recently searching一种在我在 adobe air 中显示的 PDF 上调用打印功能的方法。我在 this fellow 的帮助下解决了这个问题,并通过在我的 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 had to say关于postMessage,但我发现的只是window.postMessage。

现在,代码就像一个魅力,postMessage 神奇地将我的消息发送到 PDF 的嵌入式 JavaScript。但是,我仍然不确定我是如何做到这一点的。

我找到了adobe talking about这个方法,但没有真正解释它:

HTML-PDF communication basics
JavaScript in an HTML page can send a message to JavaScript in PDF content by calling the postMessage() method of the DOM object representing the PDF content.

有什么想法是如何实现的吗?

最佳答案

“postMessage”本质上是 JavaScript 发布/订阅模型的一半。

您可以发布任何您喜欢的消息,但它依赖于监听该消息事件的东西。因此,您的 postMessage 本质上是您将一个事件扔过栅栏,希望另一边有东西正在等待对该事件执行某些操作。在栅栏的另一边(希望)是一个像这样的事件监听器:

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

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

更多信息请点击:https://developer.mozilla.org/en/DOM/window.postMessage

在您的具体示例中,当您嵌入 PDF、Flash 等对象时,它们很可能会以这种方式监听事件。

关于javascript - 当在 html 对象标签上调用 JS 函数 'postMessage()' 时,它会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402269/

相关文章:

javascript - 如何解决通过id查找item的问题?

javascript - 如何从 React Select 访问值并将它们传递给提交时的 Formik 值?

javascript - Amazon aStore 的动态高度

html - 悬停时的通用兄弟选择器

javascript - Nuxt.js:调度 Vuex 操作不适用于 mapState

html - 识别重复的样式 css

javascript - 文档更新但 getElementById() 返回不正确的值?

apache-flex - Flex 中的背景图像

ios - 以 KB 为单位减小 Flash 文件大小?

actionscript-3 - 您能期望 flash/as3 播放器最终进行垃圾收集吗?