我有一個容器的innerHTML設置該函數的返回的字符串動態加載PDF文檔轉換爲網頁一些代碼:嵌入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>';
}
在IE瀏覽器與安裝了Adobe Reader插件(由檢測到Adobe ActiveX的代碼確定,代碼爲PDFObject),我的代碼將此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),但有時不會。當我的測試服務器上運行該站點時,IE9從未工作過,該服務器運行IIS6是不必要的。我不知道我運行的IIS版本是否導致我的問題,但從Fiddler日誌來看,我對此表示懷疑。
我一直在俯視小提琴手,在這裏和那裏做小小的調整,看看是否有任何改變。到目前爲止,什麼都沒有。我可以看到的唯一區別是Server
標題。
我發現IE7和IE8需要classid
屬性;否則,他們會爲PDF提出多個請求,並且經常無法加載它。它也顯着改善了IE9的緩存行爲。
每次獲取PDF時略有不同。我目前沒有將它保存到臨時文件或任何東西,儘管如果它是絕對必要的(所以我可以在後續請求中重新發送相同的PDF)。
響應正在gzip編碼,但是我有同樣的問題,無論它是否啓用。
我注意到,當問題發生時,終止AcroRd32.exe有時會暫時解決問題。
備註:Firefox和Opera在嵌入PDF的頁面內彈出窗口中使用相同的HTML。這工作非常好。 (如果Adobe Reader NPAPI插件沒有上一個print()方法,我已經能夠找到,遺憾的是,這樣的彈出指示用戶點擊內嵌視圖的打印按鈕)
沒有什麼是試圖阻止我其他的嵌入方法如iframe
,但是當我第一次嘗試時,我有一些奇怪的問題(在這一切混亂之後,現在不記得他們現在是什麼了)。
我想這就是我知道的問題,現在一切......
我記得首先嚐試了一個iframe,但我有一些奇怪的問題。現在不記得了。儘管現在不重要;我的項目經理想要改變另一個項目,讓這個項目變得毫無意義。但是,從我所知道的情況來看,這可能會解決我現在遇到的問題。 – Taudris 2011-12-19 19:13:34