PDF postMessage 未定义

PDF postMessage is undefined

注意 - this 似乎记录了我遇到的关于 "postMessage" 未定义的相同问题,但那里没有提供答案。

我是处理 PDF 文件的新手。我正在尝试修复现有应用程序中的错误。该应用程序在浏览器中显示一个表单,允许用户进行编辑,然后使用 Adob​​e 的 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 对象上调用该方法,所以我认为这是 Adob​​e 提供的。

浏览器为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 它是否有效。