1

これが私の状況です。

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 を指定します。

ご協力いただきありがとうございます。

4

2 に答える 2

2

Internet Explorerの場合は、次を使用します。

<object id="pdfForm" type="application/pdf" data="yourPDF.pdf"></object>

Firefoxの場合、次を使用します。

<embed id="pdfForm" type="application/pdf" src="yourPDF.pdf"></embed>
于 2011-02-11T19:12:10.187 に答える
1

これで埋め込みオブジェクトにアクセスすることもできます

var emb = document.getElementsByTagName("EMBED")[0];

ただし、含まれているページからそのコードを実行するので、ドキュメントで単に呼び出すのではなく、iframe への参照を取得します。

于 2011-04-26T19:29:04.080 に答える