注- 这似乎记录了我正在经历的关于"postMessage“未定义的问题,但是没有提供任何答案。
我刚开始使用PDF文件。我正在试图修复现有应用程序中的一个bug。应用程序在浏览器中显示表单,允许用户编辑,然后使用Adobe的JavaScript postMessage方法将用户的更改回发到服务器。由于某些原因,PDF对象似乎没有定义postMessage方法。pdfObject是按名称查找的,它有许多属性(属性是一个节点映射,baseURL是用户用于导航到PDF、childNodes和contentDocument的URL ),有许多onXX方法(例如onBeforeCut、onActivate等),但myPdfObj.postMessage没有定义。PDF显示得很好,可以编辑,但是当应用程序试图调用未定义的方法postMessage时,屏幕上会出现错误" error : Target“。知道会发生什么事吗?
注意--尽管postMessage还没有定义,但我们的暂存站点看起来仍然有效。我不知道为什么。但是,本地托管的站点不起作用。
以下是评论中发布的每一个问题的更多信息:
我认为它应该有一个postMessage函数,因为我们的代码正在调用该方法,而且它在任何地方都没有声明,而且我从网络上的帖子(例如这里和这里)中找到了其他人在PDF对象上调用该方法的证据,所以我认为这是Adobe提供的。
浏览器是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。我们还在同一个myOnDisclose中定义了一个JavaScript方法,在嵌入式脚本的末尾,它使用这个逻辑将方法分配给容器的messageHandler:
var msgHandlerObject = new Object();
msgHandlerObject.onMessage = myOnMessage;
msgHandlerObject.onError = myOnError;
msgHandlerObject.onDisclose = myOnDisclose;
msgHandlerObject.myDoc = this;
this.hostContainer.messageHandler = msgHandlerObject;非常感谢!
发布于 2016-11-23 17:15:56
嗯,我不知道如何解释它,但似乎方法"postMessage“没有定义是可以的。事实证明,回调不起作用的原因是,我改变了它调用的脚本如何嵌入PDF服务器端,并且不再正确地嵌入它们。当我修复它时,它都能工作,尽管postMessage还没有定义,所以我不知道它为什么/如何工作。
https://stackoverflow.com/questions/40749686
复制相似问题