注意 - this似乎记录了我遇到的与#34; postMessage"相同的问题。未定义,但没有提供答案。
我是处理PDF文件的新手。我试图修复现有应用程序中的错误。应用程序在浏览器中显示一个表单,允许用户编辑,然后使用Adobe的JavaScript postMessage方法将用户的更改发回服务器。出于某种原因,PDF对象似乎没有定义postMessage方法。 pdfObject名称很好,它有很多很多属性(属性是节点映射,baseURL是用户用来导航到PDF,childNodes和contentDocument的URL,有很多onXX方法(例如onBeforeCut, onActivate等),但myPdfObj.postMessage未定义.PDF显示正常并且可以编辑,但是当应用程序尝试调用未定义的方法postMessage时,出现错误"错误:目标文档未公开"出现在屏幕上。知道可能会发生什么吗?
注意 - 看起来我们的暂存网站仍然有效,即使postMessage未定义。我不知道为什么。但是,本地托管的站点不起作用。
以下是评论中发布的每个问题的更多信息:
我认为它应该有一个postMessage函数,因为我们的代码正在调用该方法,并且它没有在任何地方声明,我从网上的帖子中找到证据(例如here和{{3}其他人在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时运行的脚本是嵌入在PDF文件本身中的js函数(我们使用第三方库来嵌入脚本)。这些函数称为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;
非常感谢!
答案 0 :(得分:0)
好吧,我不确定如何解释它,但似乎可以定义“postMessage”方法未定义。事实证明,回调不起作用的原因是我正在改变它调用的脚本如何嵌入到PDF服务器端,并且不再将它们嵌入到正确的位置。当我修复它时,一切正常,虽然postMessage仍未定义,所以我不确定为什么/如何工作。