Что делает функция JS postMessage () при вызове тега html-объекта - PullRequest
0 голосов
/ 08 марта 2010

Я недавно искал способ вызова функции печати в PDF, который я отображал в Adobe Air. Я решил эту проблему с небольшой помощью этого парня и вызовом postMessage в моем 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 сказал о postMessage, но все, что я нашел, было window.postMessage.

Теперь код работает как чудо, и postMessage волшебным образом отправляет мое сообщение во встроенный JavaScript моего PDF. Тем не менее, я все еще не уверен, как я это делаю.

Я обнаружил, Adobe говорит о этом методе, но не совсем объясняет его:

Основы связи HTML-PDF
JavaScript на странице HTML может отправить сообщение JavaScript в содержимом PDF, вызвав метод postMessage () объекта DOM, представляющего содержимое PDF.

Есть идеи, как это сделать?

1 Ответ

3 голосов
/ 08 марта 2010

"postMessage" - это, по сути, половина модели публикации / подписки для JavaScript.

Вы можете опубликовать любое сообщение, которое вам нравится, но оно зависит от того, что прослушивает событие этого сообщения. Таким образом, ваше postMessage - это, по сути, вы бросаете событие за забор, надеясь, что с другой стороны что-то ждет, чтобы что-то сделать с событием. С другой стороны забора (надеюсь) слушатель событий, подобный этому:

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

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

Больше информации здесь: https://developer.mozilla.org/en/DOM/window.postMessage

В вашем конкретном примере, когда вы встраиваете объект, такой как PDF, Flash или что-то подобное, они вполне могут прослушивать события именно таким образом.

...