PDF postMessage未定义

时间:2016-11-22 19:00:56

标签: javascript pdf undefined postmessage

注意 - 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;

非常感谢!

1 个答案:

答案 0 :(得分:0)

好吧,我不确定如何解释它,但似乎可以定义“postMessage”方法未定义。事实证明,回调不起作用的原因是我正在改变它调用的脚本如何嵌入到PDF服务器端,并且不再将它们嵌入到正确的位置。当我修复它时,一切正常,虽然postMessage仍未定义,所以我不确定为什么/如何工作。