13

Đây là vấn đề, trong đó chỉ xảy ra trong Internet Explorer (IE). Tôi có một trang có liên kết đến một số loại tệp khác nhau. Các liên kết từ các tệp này thực thi chức năng Javascript mở một cửa sổ mới và tải tệp cụ thể. Điều này làm việc tuyệt vời, trừ khi các tập tin tôi cần phải mở trong cửa sổ mới là một PDF trong trường hợp này cửa sổ là trống, mặc dù URL là trong lĩnh vực địa chỉ. Làm mới cửa sổ bằng F5 không giúp ích gì. Tuy nhiên, nếu tôi đặt con trỏ vào trường địa chỉ và nhấn <enter> thì PDF sẽ tải lên ngay.IE sẽ không tải PDF trong cửa sổ được tạo bằng window.open

Sự cố này chỉ xảy ra trong IE. Tôi đã thấy nó trong IE 7 và 8 và đang sử dụng Adobe Acrobat Reader 9. Trong Firefox (PC và Mac) mọi thứ hoạt động hoàn hảo. Trong Chrome (Mac), tệp PDF được tải xuống. Trong Safari (Mac), nó hoạt động. Trong Opera (Mac), nó nhắc tôi mở hoặc lưu. Về cơ bản, mọi thứ có thể hoạt động tốt, ngoại trừ IE.

Tôi đã tìm kiếm các sự cố tương tự và đã thấy một số bài đăng được đề xuất điều chỉnh một số Tùy chọn Internet trên IE. Tôi đã thử điều này nhưng nó không giúp được gì, và vấn đề cũng không hoàn toàn giống nhau.

Đây là hàm Javascript tôi sử dụng để mở cửa sổ mới.

function newwin(url,w,h) { 
    win = window.open(url,"temp","width="+w+",height="+h+",menubar=yes,toolbar=yes,location=yes,status=yes,scrollbars=auto,resizable=yes"); 
    win.focus(); 
} 

Bạn có thể thấy rằng tôi chuyển vào URL cũng như chiều cao, h và chiều rộng, w, của cửa sổ. Tôi đã sử dụng một chức năng như thế này trong nhiều năm và theo như tôi biết chưa bao giờ có một vấn đề.

Tôi gọi hàm newwin() bằng cách sử dụng chức năng này.

<a href="javascript:newwin('/path/document.pdf',400,300)">document.pdf</a> 

(Vâng, tôi biết có những phương pháp khác, tốt hơn so với sử dụng inline JS, và tôi đã thậm chí đã thử một số trong số họ bởi vì tôi đã chạy ra khỏi điều cần cố gắng, nhưng không hoạt động.)

Vì vậy, nếu có ai đó có ý tưởng về những gì có thể gây ra vấn đề này, tôi rất muốn nghe nó.

Trả lời

12

thử:

function newwin(url,w,h) { 
    var win = window.open("","temp","width="+w+",height="+h+",menubar=yes,toolbar=yes,location=yes,status=yes,scrollbars=auto,resizable=yes"); 
    win.location.href = url; 
    win.focus(); 
} 
+2

Tôi gặp sự cố tương tự, sau khi áp dụng giải pháp của bạn, bản pdf giờ đây hoàn toàn phù hợp. Bạn có thể vui lòng giải thích cách thức hoạt động này? Đó là khu vực hoặc một số bảo mật? Tại sao nó không hoạt động khi tôi chỉ sử dụng window.open? – SoftwareGeek

+1

Tôi khá chắc chắn nó chỉ là một lỗi trong việc thực hiện của IE (như thường lệ). Nếu nó là một vấn đề an ninh thì nó sẽ không hoạt động chút nào. –

1

Tôi đã giải quyết vấn đề này với một iframe ẩn

<div id="iframe" style="display: none"> 
    <iframe id="frm" style="display: none"></iframe> 
</div> 

Và logic này đây (sử dụng jquery):

if ($.browser.msie && ($.browser.version &lt; 9.0)) { 
    frm.location.href = href; 
} 
else { 
    window.open(href); 
} 

Các hành vi trong trường hợp của tôi chính xác là tài liệu được mở trong cửa sổ bật lên, vì tôi đang sử dụng

Content-Disposition: attachment; filename="document.pdf"