注 - this似乎记录我遇到的关于“postMessage”未定义的相同问题,但未提供答案。PDF postMessage未定义
我是使用PDF文件的新手。我正在尝试修复现有应用程序中的错误。应用程序在浏览器中显示一个表单,允许用户编辑,然后使用Adobe的JavaScript postMessage方法将用户的更改回送到服务器。出于某种原因,PDF对象似乎没有定义postMessage方法。 pdfObject通过名称很好找到,它有很多很多属性(属性是一个节点映射,baseURL是用户导航到PDF时使用的URL,设置了childNodes和contentDocument,还有很多onXX方法(例如onBeforeCut, onActivate等),但是myPdfObj.postMessage是未定义的,PDF显示正常并且可以编辑,但是当应用程序试图调用未定义的方法postMessage时,屏幕上出现错误“ERROR:Target document not revealed”。想法可能会在
注意 - 它看起来像我们的临时站点确实还甚至工作虽然PostMessage一未定义我不知道为什么然而,本地托管的网站无法正常工作
这里有一个小。每个问题的更多信息发布在评论:
我认为它应该有一个postMessage函数,因为我们的代码正在调用该方法,并且它没有在任何地方声明,并且我从网上的帖子找到证据(例如, here和here)其他人正在PDF对象上调用该方法,所以我认为这是Adobe提供的。
浏览器是IE II。
这是导致错误的代码 - 当这个按钮被点击
<button id="useraction_savedraft" onclick="saveDraft();">Save Draft</button>
这个JavaScript被称为:
function saveDraft() {
$('#keepAsDraft').val('true');
sendMessage(["submitForm"]);
}
var pdfObject = null;
function sendMessage(aMessage) {
if (pdfObject == null) {
pdfObject = document.getElementById("pdfForm");
if (typeof(pdfObject) == "undefined" || typeof (pdfObject.postMessage) == "undefined") {
statusErrorMessage("ERROR: Unable to initialize pdfForm. Your browser may not be compatible with PDF inline-editing.");
return;
}
pdfObject.messageHandler = {
onMessage: function(msg) {
if (msg[0]=="saveFdf") {
$("#fdf").val(msg[1]);
$("#entryForm").submit();
}
else if (msg[0]=="saveXFA") {
$("#fdf").val("");
$("#xfa").val(msg[1]);
$("#entryForm").submit();
}
},
onError: function(error, msg)
{
statusErrorMessage("ERROR: " + error.message);
return;
}
};
}
pdfObject.postMessage(aMessage);
}
运行时的onMessage和onError的被称为是JS功能的脚本嵌入PDF文件本身(我们使用第三方库来嵌入脚本)。这些函数被称为myOnMessage和myOnError。我们还同一个JavaScript定义myOnDisclose方法,并在嵌入脚本的末尾,它使用这种逻辑的方式分配到容器的的MessageHandler:
var msgHandlerObject = new Object();
msgHandlerObject.onMessage = myOnMessage;
msgHandlerObject.onError = myOnError;
msgHandlerObject.onDisclose = myOnDisclose;
msgHandlerObject.myDoc = this;
this.hostContainer.messageHandler = msgHandlerObject;
非常感谢!
你为什么认为PDF应该有一个'postMessage'函数?你能否发布导致错误的代码? –
PDFs是他们自己的沙箱 –
“在浏览器中显示表单”是它在应用程序或外部浏览器中的嵌入式浏览器。它是什么浏览器?铬?铬? IE浏览器?火狐? – Bigman