注 - 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函數,因爲我們的代碼正在調用該方法,並且它沒有在任何地方聲明,並且我從網上的帖子找到證據(例如, 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。我們還同一個JavaScript定義myOnDisclose方法,並在嵌入腳本的末尾,它使用這種邏輯的方式分配到容器的的MessageHandler:
var msgHandlerObject = new Object();
msgHandlerObject.onMessage = myOnMessage;
msgHandlerObject.onError = myOnError;
msgHandlerObject.onDisclose = myOnDisclose;
msgHandlerObject.myDoc = this;
this.hostContainer.messageHandler = msgHandlerObject;
非常感謝!
你爲什麼認爲PDF應該有一個'postMessage'函數?你能否發佈導致錯誤的代碼? –
PDFs是他們自己的沙箱 –
「在瀏覽器中顯示錶單」是它在應用程序或外部瀏覽器中的嵌入式瀏覽器。它是什麼瀏覽器?鉻?鉻? IE瀏覽器?火狐? – Bigman