代码之家  ›  专栏  ›  技术社区  ›  Stephano

当对html对象标记调用js函数“postmessage()”时,它会做什么?

  •  0
  • Stephano  · 技术社区  · 16 年前

    我是 recently searching 为了在我在adobe air中显示的pdf文件上调用print函数。我在一点帮助下解决了这个问题 this fellow ,并通过调用 邮报 在我的pdf上,就像这样:

    //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 关于邮件,但我只找到了window.postmessage。

    现在,代码就像一个符咒,postmessage神奇地将我的消息发送到pdf的嵌入式javascript。不过,我还是不确定我是怎么做到的。

    我发现 adobe talking about 这种方法,但没有真正解释:

    HTML-PDF通信基础
    html页面中的javascript可以通过调用表示pdf内容的dom对象的postmessage()方法将消息发送到pdf内容中的javascript。

    你知道这是怎么做到的吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Fenton    16 年前

    “postmessage”实际上是javascript发布/订阅模型的一半。

    您可以发布任何您喜欢的消息,但它依赖于侦听该消息事件的内容。所以你的邮件实质上就是你把一个事件扔到篱笆上,希望有东西在另一边等着对事件做些什么。在围栏的另一边是(希望)这样的事件侦听器:

    window.addEventListener("message", doSomethingWithTheMessage, false);
    
    function doSomethingWithTheMessage(event) {
        alert("Do Something!");
    }
    

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

    在您的特定示例中,当您沿着这些线嵌入一个对象(如pdf、flash或其他东西)时,它们很可能会以这种方式监听事件。