首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postMessage未定义

postMessage未定义
EN

Stack Overflow用户
提问于 2016-11-22 19:00:56
回答 1查看 489关注 0票数 0

注- 似乎记录了我正在经历的关于"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。

以下是导致错误的代码-当单击此按钮时

代码语言:javascript
复制
<button id="useraction_savedraft" onclick="saveDraft();">Save Draft</button> 

这个JavaScript称为:

代码语言: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:

代码语言:javascript
复制
var msgHandlerObject = new Object();
msgHandlerObject.onMessage = myOnMessage;
msgHandlerObject.onError = myOnError;
msgHandlerObject.onDisclose = myOnDisclose;
msgHandlerObject.myDoc = this;

this.hostContainer.messageHandler = msgHandlerObject;

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 17:15:56

嗯,我不知道如何解释它,但似乎方法"postMessage“没有定义是可以的。事实证明,回调不起作用的原因是,我改变了它调用的脚本如何嵌入PDF服务器端,并且不再正确地嵌入它们。当我修复它时,它都能工作,尽管postMessage还没有定义,所以我不知道它为什么/如何工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40749686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档