PDF postMessage 未定义
PDF postMessage is undefined
注意 - this 似乎记录了我遇到的关于 "postMessage" 未定义的相同问题,但那里没有提供答案。
我是处理 PDF 文件的新手。我正在尝试修复现有应用程序中的错误。该应用程序在浏览器中显示一个表单,允许用户进行编辑,然后使用 Adobe 的 JavaScript postMessage 方法将用户的更改 post 返回到服务器。出于某种原因,PDF 对象似乎没有定义 postMessage 方法。 pdfObject 是通过名称找到的,它有很多很多属性(属性是节点映射,baseURL 是用户用来导航到 PDF 的 URL,设置了 childNodes 和 contentDocument, onXX方法有很多(例如onBeforeCut,onActivate等),但是myPdfObj.postMessage未定义。PDF显示正常,可以编辑,但是当应用程序尝试调用未定义方法时post消息,错误 "ERROR: Target document not disclosed" 出现在屏幕上。知道可能发生了什么吗?
注意 - 即使 post消息未定义,我们的暂存站点似乎仍然有效。我不知道为什么。但是,本地托管站点不起作用。
post评论中的每个问题的详细信息如下:
我认为它应该有一个 postMessage 函数,因为我们的代码正在调用该方法,并且它没有在任何地方声明,我从网上的 posts 中找到了证据(例如here and 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 时 运行 的脚本是嵌入在 PDF 文件本身中的 js 函数(我们使用第 3 方库来嵌入脚本)。这些函数称为 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;
非常感谢!
嗯,我也不知道怎么解释,不过好像方法"postMessage"未定义也没关系。事实证明,回调不起作用的原因是我正在更改它调用的脚本嵌入 PDF 服务器端的方式,并且不再正确嵌入它们。当我修复它时,一切正常,尽管 postMessage 仍未定义,所以我不确定 why/how 它是否有效。
注意 - this 似乎记录了我遇到的关于 "postMessage" 未定义的相同问题,但那里没有提供答案。
我是处理 PDF 文件的新手。我正在尝试修复现有应用程序中的错误。该应用程序在浏览器中显示一个表单,允许用户进行编辑,然后使用 Adobe 的 JavaScript postMessage 方法将用户的更改 post 返回到服务器。出于某种原因,PDF 对象似乎没有定义 postMessage 方法。 pdfObject 是通过名称找到的,它有很多很多属性(属性是节点映射,baseURL 是用户用来导航到 PDF 的 URL,设置了 childNodes 和 contentDocument, onXX方法有很多(例如onBeforeCut,onActivate等),但是myPdfObj.postMessage未定义。PDF显示正常,可以编辑,但是当应用程序尝试调用未定义方法时post消息,错误 "ERROR: Target document not disclosed" 出现在屏幕上。知道可能发生了什么吗?
注意 - 即使 post消息未定义,我们的暂存站点似乎仍然有效。我不知道为什么。但是,本地托管站点不起作用。
post评论中的每个问题的详细信息如下:
我认为它应该有一个 postMessage 函数,因为我们的代码正在调用该方法,并且它没有在任何地方声明,我从网上的 posts 中找到了证据(例如here and 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 时 运行 的脚本是嵌入在 PDF 文件本身中的 js 函数(我们使用第 3 方库来嵌入脚本)。这些函数称为 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;
非常感谢!
嗯,我也不知道怎么解释,不过好像方法"postMessage"未定义也没关系。事实证明,回调不起作用的原因是我正在更改它调用的脚本嵌入 PDF 服务器端的方式,并且不再正确嵌入它们。当我修复它时,一切正常,尽管 postMessage 仍未定义,所以我不确定 why/how 它是否有效。