2016-11-22 22 views
0

注 - this似乎记录我遇到的关于“postMessage”未定义的相同问题,但未提供答案。PDF postMessage未定义

我是使用PDF文件的新手。我正在尝试修复现有应用程序中的错误。应用程序在浏览器中显示一个表单,允许用户编辑,然后使用Adobe的JavaScript postMessage方法将用户的更改回送到服务器。出于某种原因,PDF对象似乎没有定义postMessage方法。 pdfObject通过名称很好找到,它有很多很多属性(属性是一个节点映射,baseURL是用户导航到PDF时使用的URL,设置了childNodes和contentDocument,还有很多onXX方法(例如onBeforeCut, onActivate等),但是myPdfObj.postMessage是未定义的,PDF显示正常并且可以编辑,但是当应用程序试图调用未定义的方法postMessage时,屏幕上出现错误“ERROR:Target document not revealed”。想法可能会在

注意 - 它看起来像我们的临时站点确实还甚至工作虽然PostMessage一未定义我不知道为什么然而,本地托管的网站无法正常工作

这里有一个小。每个问题的更多信息发布在评论:

我认为它应该有一个postMessage函数,因为我们的代码正在调用该方法,并且它没有在任何地方声明,并且我从网上的帖子找到证据(例如, herehere)其他人正在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的被称为是JS功能的脚本嵌入PDF文件本身(我们使用第三方库来嵌入脚本)。这些函数被称为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

你为什么认为PDF应该有一个'postMessage'函数?你能否发布导致错误的代码? –

+0

PDFs是他们自己的沙箱 –

+0

“在浏览器中显示表单”是它在应用程序或外部浏览器中的嵌入式浏览器。它是什么浏览器?铬?铬? IE浏览器?火狐? – Bigman

回答

0

那么,我不知道如何解释它,但似乎没有什么方法“postMessage”是未定义的。事实证明,回调不起作用的原因是我正在改变它调用的脚本嵌入到PDF服务器端的方式,而不是再将它们嵌入它们。当我解决这个问题时,它一切正常,尽管postMessage仍然未定义,所以我不确定它为什么/如何工作。