2016-11-22 4 views
0

주 - this은 "postMessage"가 정의되지 않은 것과 관련하여 겪고있는 것과 동일한 문제를 문서화 한 것으로 보이지만 답변이 없습니다.PDF postMessage가 정의되지 않았습니다.

PDF 파일 작업을 처음 사용합니다. 기존 응용 프로그램에서 버그를 수정하려고합니다. 응용 프로그램은 브라우저에 양식을 표시하고 사용자가 편집 할 수있게 한 다음 Adobe의 JavaScript postMessage 메서드를 사용하여 사용자의 변경 사항을 서버에 다시 게시합니다. 어떤 이유로 PDF 객체에 postMessage 메소드가 정의되어 있지 않은 것처럼 보입니다. pdfObject는 fine이라는 이름으로 발견되며 많은 특성을 가지고 있습니다 (속성은 노드 맵, baseURL은 PDF로 이동하는 데 사용되는 URL이며 childNodes 및 contentDocument가 설정되어 있습니다. onXe 메소드가 많이 있습니다 (예 : onBeforeCut, onActivate 등), myPdfObj.postMessage는 정의되어 있지 않습니다 .PDF는 잘 표시되고 편집 될 수 있지만 앱이 정의되지 않은 postMessage 메서드를 호출하려고하면 "ERROR : Target document not disclosure"오류가 화면에 나타납니다. 에 갈 수있는 어떤 아이디어는

주 -?... 그것은 여기에 내가 그러나, 로컬 호스팅 사이트가 작동하지 않는 이유를 아무 생각이 여전히 있지만 PostMessage를가 정의되지 않은 경우에도 작동합니까 우리의 준비 사이트처럼

보이는 약간의 의견에 게시 된 질문 당 자세한 정보 :

우리 코드는 그 메소드를 호출하고 어디에서나 선언되지 않았으므로 postMessage 함수가 있어야한다고 생각합니다. 그리고 그물에있는 게시물로부터 증거를 찾습니다. herehere) 다른 사람들이 PDF 객체에서이 메서드를 호출한다고해서 Adobe에서 제공하는 기능이라고 생각합니다.

브라우저는 IE II입니다. 여기

오류를 일으키는 코드 -이 버튼이 자바 스크립트라고

<button id="useraction_savedraft" onclick="saveDraft();">Save Draft</button> 

를 클릭 :의 onMessage와의 OnError라고는 JS 기능이 때 실행

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); 
} 

스크립트를 그 PDF 파일 자체에 임베드되어 있습니다 (우리는 제 3 자 라이브러리를 사용하여 스크립트를 임베드합니다). 함수는 myOnMessage 및 myOnError입니다. 우리는 또한 같은 자바 스크립트에 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

PDF는 자체 샌드 박스입니다. –

+0

"브라우저에서 양식 표시"는 응용 프로그램 또는 외부 브라우저의 임베디드 브라우저입니다. 어떤 브라우저입니까? 크롬? 크롬? IE? 파이어 폭스? – Bigman

답변

0

글쎄, 어떻게 설명해야할지 모르겠지만, "postMessage"메소드가 정의되지 않았다고해도 괜찮은 것 같습니다. 콜백이 작동하지 않는 이유는 그것이 호출하는 스크립트가 PDF 서버쪽에 포함되어 더 이상 제대로 삽입되지 못했던 방식을 변경했다는 것입니다. 내가 고칠 때 postMessage가 아직 정의되지 않았으므로 모두 작동하지만 왜/어떻게 작동하는지 잘 모르겠습니다.