PDF postMessage 未定义
Posted
技术标签:
【中文标题】PDF postMessage 未定义【英文标题】:PDF postMessage is undefined 【发布时间】:2016-11-22 19:00:56 【问题描述】:注意 - this 似乎记录了我遇到的关于“postMessage”未定义的相同问题,但没有提供答案。
我是处理 PDF 文件的新手。我正在尝试修复现有应用程序中的错误。该应用程序在浏览器中显示一个表单,允许用户进行编辑,然后使用 Adobe 的 javascript postMessage 方法将用户的更改回发到服务器。由于某种原因,PDF 对象似乎没有定义 postMessage 方法。 pdfObject 可以通过名称找到,它有很多很多属性(attributes 是节点图,baseURL 是用户用来导航到 PDF 的 URL,设置了 childNodes 和 contentDocument,还有很多 onXX 方法(例如 onBeforeCut、 onActivate 等),但 myPdfObj.postMessage 未定义。PDF 显示正常,可以编辑,但是当应用程序尝试调用未定义的方法 postMessage 时,屏幕上出现错误“错误:目标文档未公开”。任何知道会发生什么吗?
注意 - 即使 postMessage 未定义,我们的临时站点似乎仍然可以工作。我不知道为什么。但是,本地托管的站点不起作用。
以下是 cmets 中发布的每个问题的更多信息:
我认为它应该有一个 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 时运行的脚本是嵌入在 PDF 文件本身中的 js 函数(我们使用 3rd 方库来嵌入脚本)。这些函数称为 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
函数?您能否发布导致错误的代码?
PDF 是他们自己的沙箱
“在浏览器中显示表单”是应用程序中的嵌入式浏览器还是外部浏览器。它是什么浏览器?铬合金?铬? IE?火狐?
以上主要问题中的回复
【参考方案1】:
好吧,我不知道如何解释它,但似乎可以将方法“postMessage”未定义。事实证明,回调不起作用的原因是我正在更改它调用的脚本如何嵌入 PDF 服务器端,并且不再正确嵌入它们。当我修复它时,一切正常,尽管 postMessage 仍未定义,所以我不确定它为什么/如何工作。
【讨论】:
以上是关于PDF postMessage 未定义的主要内容,如果未能解决你的问题,请参考以下文章
MFC发送自定义消息-PostMessage和SendMessage
用PostMessage函数向窗体发送鼠标单击消息,单击的X坐标=100 ,y坐标=200.该窗体的句柄为hand。代码怎么写