2016-11-22 4 views
0

Примечание - this, похоже, документирует ту же проблему, что и в отношении «postMessage», который не определен, но ответа там нет.PDF postMessage не определено

Я новичок в работе с файлами PDF. Я пытаюсь исправить ошибку в существующем приложении. Приложение отображает форму в браузере, позволяет пользователю редактировать, а затем использует метод postMessage JavaScript JavaScript для публикации изменений пользователя на сервере. По какой-то причине объект PDF не имеет метода postMessage метода. Файл pdfObject находится по имени fine и имеет множество свойств (атрибуты - это карта узлов, baseURL - это URL-адрес, используемый пользователем для навигации по PDF, childNodes и contentDocument, существует много методов onXX (например, onBeforeCut, onActivate и т. д.), но myPdfObj.postMessage не определен. PDF отлично отображен и может быть отредактирован, но когда приложение пытается вызвать неопределенный метод postMessage, на экране появляется сообщение об ошибке «ERROR: целевой документ не разглашается». идея, что может идти на

Примечание - похоже, наш перевалочный сайт все еще работает ХОТЯ PostMessage не определено Я понятия не имею, почему Однако локально размещение сайта не работает

Вот немного... больше информации за вопросы, заданные в комментариях:

Я думаю, что у него должна быть функция postMessage, потому что наш код вызывает этот метод, и он нигде не объявлен, и я нахожу данные из сообщений в сети (например, here и here), которые другие называют этим методом для объектов 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. Мы также определяем метод myOnDisclose в том же JavaScript, и в конце встроенного сценария, он использует эту логику, чтобы назначить методы 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? Fire Fox? – Bigman

ответ

0

Ну, я не уверен, как это объяснить, но кажется, что метод postMessage не определен. Оказывается, причина, по которой обратный вызов не работал, заключалась в том, что я вносил изменения в то, как скрипты, которые он вызывает, встраиваются в сервер на стороне сервера PDF и больше не встраивают их. Когда я исправляю это, все работает, хотя postMessage все еще не определено, поэтому я не уверен, почему и как это работает.

Смежные вопросы