これが私の状況です。
PDFフォームが埋め込まれたWebページがありました。基本的なオブジェクト タグ (FF に埋め込む) を使用して、次のように PDF ファイルを読み込みました。
<object id="pdfForm" height="100%" width="100%" type="application/pdf" data="..url"></object>
この Web ページには、埋め込みオブジェクトの postMessage API を使用して PDF に埋め込まれた JavaScript を実行する Javascript をトリガーする HTML 保存ボタンがありました。基本的に、そのコードは次のようになります。
function save() {
sendMessage(["submitForm"]);
}
function sendMessage(aMessage) {
pdfObject = document.getElementById("pdfForm");
if (typeof(pdfObject) == "undefined")
return;
if (typeof (pdfObject.postMessage) == "undefined")
return;
pdfObject.postMessage(aMessage);
}
これはすべて美しく機能していました。
ただし、Firefox で問題が発生したため、オブジェクト タグの代わりに iFrame を使用して PDF を埋め込む必要があります。これで、PDF は次のコードを使用して埋め込まれます。
<iframe id="pdfWrapper" src="..someUrl" width="100%" height="800px" frameborder="0"></iframe>
残念ながら、このコードでは、メッセージを投稿するための JavaScript が機能しなくなり、postMessage API にアクセスできるように pdf オブジェクトにアクセスする方法がわかりません。
fiddler または chome javascript デバッガーを使用すると、ブラウザーが iframe 内で (オブジェクト タグではなく) 埋め込みタグを自動的に生成していることは明らかですが、それでは postMessage API にアクセスできません。これは私が試しているコードで、動作しません:
function sendMessage(aMessage) {
var frame = document.getElementById("pdfWrapper");
var doc = null;
if (frame.contentDocument)
doc = frame.contentDocument;
else
if (frame.contentWindow)
doc = frame.contentWindow.document;
else
if (frame.document)
doc = frame.document;
if (doc==null || typeof(doc) == "undefined")
return;
var pdfObject = doc.embeds[0];
if (pdfObject==null || typeof (pdfObject.postMessage) == "undefined")
return;
pdfObject.postMessage(aMessage);
}
これについて何か助けはありますか?長い質問で申し訳ありません。
編集: メッセージングが機能するかどうかをテストできるように、サンプルをコードで提供するように依頼されました。基本的に必要なのは、この JavaScript が埋め込まれた PDF だけです。
function myOnMessage(aMessage) {
app.alert("Hello World!");
}
function myOnDisclose(cURL, cDocumentURL) {
return true;
}
function myOnError(error, aMessage) {
app.alert(error);
}
var msgHandlerObject = new Object();
msgHandlerObject.onMessage = myOnMessage;
msgHandlerObject.onError = myOnError;
msgHandlerObject.onDisclose = myOnDisclose;
msgHandlerObject.myDoc = this;
this.hostContainer.messageHandler = msgHandlerObject;
JavaScript を使用して PDF を作成するには、Acrobat pro が必要であることがわかったので、これを簡単にするために、次の URL にサンプル コード (動作するシナリオと動作しないシナリオの両方) を投稿しました。
Windows を使用している場合は、zip をダウンロードして /inetpub/wwwroot に解凍し、ブラウザで works.htm または fails.htm を指定します。
ご協力いただきありがとうございます。