2011-12-14 20 views
2

を発行し、私は動的にこの関数の戻り文字列にコンテナのinnerHTMLのを設定することで、WebページにPDF文書をロードするいくつかのコードがありますとIEで埋め込みPDF - IE9は

function getPdfString(url) { 
    return '<object data="' + url + '" type="application/pdf" classid="clsid:ca8a9780-280d-11cf-a24d-444553540000" style="width:100%;height:600px"></object>'; 
} 

をAdobe Readerプラグインがインストールされています(PDFObjectにAdobe ActiveXを検出するコードで決定)、私のコードはこのHTMLを隠しコンテナに挿入し、オブジェクト要素への参照をelに入れてからこのコードを実行します(Repeaterはカスタムクラスです):

log("** start repeater **"); 
var r = _repeater = new Repeater(function() { 
    try { 
     var delta = timeInterval(); 
     log("iteration - " + delta + "ms"); 

     el.gotoFirstPage(); //throws exceptions until the PDF is loaded 

     log("** assuming success, stop **"); 
     r.stop(); 
     r = undefined; 

     setTimeout(function() { 
      el.print(); //should succeed, can't tell because it doesn't throw or return anything 
     }, 100); 
    } catch(e) { } 
}, 0, 100); 

これは非常に畳み込まれていますが、PDFがいつロードされるか、el.print()が成功したかどうかを判断する方法がないために必要です。把握するのに長い時間がかかりましたが、IE7とIE8ではうまくいくようです。 IE9はヒットしてしまいました。通常、ローカルマシン(IIS7.5を実行しています)で作業していますが、時には動作しません。 IIS9を必要に応じて実行しているテストサーバーでサイトが実行されているときは、IE9は一度も動作しませんでした。私が実行しているIISのバージョンが私の問題を引き起こしているのかどうかはわかりませんが、Fiddlerのログから判断すると、私はそれを疑っています。

私はフィドラーを悩まされていて、何か違いがあるかどうかを確認するためにここを少しずつ作っています。これまでのところ、何もありません。私が見ることのできる唯一の違いは、Serverヘッダーです。

IE7とIE8ではclassid属性が必要であることがわかりました。そうしないと、PDFに対する複数の要求が行われ、しばしば読み込まれません。 IE9のキャッシング動作も大幅に改善されています。

PDFは、取得するたびにわずかに異なります。私は現在一時ファイルなどに保存しているわけではありませんが、絶対に必要な場合は可能ですが(後続の要求で同じPDFを再送信することができます)。

応答はgzipでエンコードされていますが、有効かどうかにかかわらず同じ問題があります。

問題が発生したときにAcroRd32.exeを終了すると、問題が一時的に解決されることがあります。

サイドノート:FirefoxとOperaは、PDFを埋め込んだインページポップアップで同じHTMLを使用します。これは完全に正常に動作します。 (Adobe Reader NPAPIプラグインには、悲しいことに、見つけられたprint()メソッドがありません。埋め込みビューの[印刷]ボタンをクリックするようユーザーに指示します)

何も私の試行を止めていませんiframeのような他の埋め込み方法がありましたが、最初に試したときに私はいくつかの奇妙な問題を抱えていました。

私は、これは、Adobe ReaderおよびIEプラグインと特異的に問題があると思わ

答えて

1

...それは私が今問題について知っているすべてのものだと思います。私はこれが一般的で再現性のあるエラー(http://forums.adobe.com/thread/758489)であることを示すいくつかのフォーラムスレッドを見つけました。

解決策は、<object>/<embed>タグよりiFrameを使用しているようです。

+0

私は最初に 'iframe'を試したことを覚えていますが、奇妙な問題がありました。今何を覚えていない。しかし今は関係ない。私のプロジェクトマネージャーは、代わりに、この1つの問題をレンダリングする別のプロジェクトと一緒に移動したいと考えています。しかし、私が知っていることから、これはおそらく私が今いる問題を解決するだろう。 – Taudris