2015-08-06 17 views
9

Tôi vẫn gặp sự cố tương tự đã được báo cáo và trả lời trước đây theo số Microsoft Edge PDF inline issue mặc dù tôi không sử dụng phiên bản trước của Win 10. Cập nhật hệ điều hành Window."Vấn đề nội tuyến Microsoft Edge PDF" Cùng một vấn đề một lần nữa

Sau khi nâng cấp Máy Win 8.1 của tôi lên Win 10 và thử nghiệm ứng dụng ASP.NET của mình, tôi đã gặp phải sự cố khi hiển thị tệp pdf nội tuyến.

Dưới đây là mã của tôi C# trong ứng dụng ASP.NET của tôi:

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition","inline;filename=some.pdf"); 
Response.BinaryWrite(pdfArray); 
Response.End(); 

Các công trình trên trên tất cả các trình duyệt, trừ Edge nơi mà nó mang lại cho tôi những lỗi sau:

Không thể mở PDF Một cái gì đó giữ PDF này từ mở.

Tôi đang làm gì sai?

+0

Lưu ý rằng thay thế nội tuyến bằng các tệp đính kèm, nó sẽ trả về lời nhắc lưu tệp và tải xuống tệp hoạt động tốt. Chúng tôi cần nó để tải trong cửa sổ trình duyệt mặc dù. – loowool

+0

Tôi gặp vấn đề tương tự với IE Edge 20.10240.16384.0 trên Win 10! – powtac

Trả lời

11

Được sao chép từ giải pháp của tôi theo số Microsoft Connect.

CẢNH BÁO: Đây là một hack hoàn chỉnh và có nguy cơ phá vỡ nếu/khi Microsoft sửa lỗi này.

Bạn sẽ thấy rằng Edge đưa ra hai yêu cầu bất cứ khi nào bạn xem tệp PDF. Đối với tôi, có vẻ như trình duyệt đang gửi yêu cầu ban đầu và sau đó trình xem PDF sẽ đưa ra yêu cầu riêng khi trình duyệt được mở. Nếu bạn nhìn vào các tiêu đề ở chỗ yêu cầu thứ hai, bạn sẽ thấy một tiêu đề DLNA lẻ đi xuống, mà chỉ nên cho phương tiện truyền thông trực tuyến, nhưng điều đó dẫn tôi đến workaround của tôi ...

  1. Khi yêu cầu được nhận trong trình xử lý hoặc trang của bạn, hãy kiểm tra xem chuỗi tác nhân người dùng có chứa "Edge/12 hay không." Nếu không, hãy gửi bản PDF của bạn trở lại bình thường. Nếu có, chuyển sang bướC# 2.

  2. Kiểm tra xem HTTP Header "GetContentFeatures.DLNA.ORG" có tồn tại không. Nếu không, điều đó có nghĩa là yêu cầu đến từ trình duyệt. Chỉ cần gửi lại tiêu đề Kiểu nội dung của "application/pdf" và một phần trống. Nếu tiêu đề tồn tại thì yêu cầu đến từ trình xem PDF và bạn có thể gửi lại PDF của mình bình thường.

Về cơ bản, trình xử lý xử lý yêu cầu đầu tiên đó là yêu cầu HEAD và sau đó trả lời PDF đầy đủ nếu chúng tôi xác định yêu cầu đến từ trình xem PDF. Rủi ro chúng tôi chạy ở đây là nếu Microsoft loại bỏ tiêu đề DLNA sau này, Edge sẽ không hiển thị đúng PDF. Hy vọng rằng, Microsoft sẽ khắc phục vấn đề này trong trình duyệt của họ và cách giải quyết này sẽ không cần thiết.

+0

Tôi có thể xác nhận rằng tôi cũng thấy 'GetContentFeatures.DLNA.ORG' này trong yêu cầu thứ hai. – powtac

+0

Trong Edge 38.14393.0.0, dường như không có yêu cầu thứ hai, tuy nhiên Công cụ dành cho nhà phát triển báo cáo "Tài nguyên này không có dữ liệu tải trọng phản hồi" cho yêu cầu được đề cập, khi tôi biết chắc chắn, bởi vì quá trình tương tự hoạt động trong Chrome . –

1

Cảm ơn mũ bảo hiểm tối, bạn đã cứu ngày của tôi. Tôi đã triển khai giải pháp trong java. Đây là mã có thể giúp người khác.

String userAgent = request.getHeader("user-agent"); 
System.out.println(userAgent); 
if(userAgent.contains("Edge")){ 
    String dlnaHeader = request.getHeader("getcontentfeatures.dlna.org"); 
    System.out.println(dlnaHeader); 
    if(dlnaHeader == null){ 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     byte[] result = baos.toByteArray(); 
     response.setContentType("application/pdf"); 
     response.setHeader("Content-disposition","inline; "); 
     response.setContentLength(result.length);    
     ServletOutputStream sos = response.getOutputStream(); 
     sos.write(result); 
     return null; 
    } 
} 
0

Xin cảm ơn các bạn, tôi chỉ muốn đặt giải pháp VB.NET của tôi ở đây dựa trên giải pháp thay thế của bạn.

Response.Clear() 
Response.ClearHeaders() 
Response.ClearContent() 
Response.Buffer = True 
If Request.Headers.Item("User-Agent").Contains("Edge") _ 
AndAlso IsNothing(Request.Headers.Item("GetContentFeatures.DLNA.ORG")) Then 
    'Edge? Send empty output if special header not exist 
    Response.ContentType = "application/pdf" 
    Dim bTemp As Byte() 
    Response.BinaryWrite(bTemp) 'Empty output 
    Response.Flush() 
    Response.SuppressContent = True 
    HttpContext.Current.ApplicationInstance.CompleteRequest() 
End If 
'Normal process: 
Response.ContentType = "application/pdf" 
Response.BinaryWrite(pdfArray) 
Response.Flush() 
Response.SuppressContent = True 
HttpContext.Current.ApplicationInstance.CompleteRequest() 
0

Với cạnh 16.16299 (Windows Fall Creator Update) đã có những thay đổi tại đây. Chúng tôi đã giải quyết vấn đề này trong vấn đề này và nó đã hoạt động "tốt". Nhưng bây giờ với phiên bản mới của Edge (16.16299) nó không hoạt động nữa và nó xảy ra, các tệp PDF bị hỏng (0 byte lớn). Hãy cẩn thận nếu bạn thực hiện giải pháp này ở đâu đó. Điều bạn cũng quan tâm là Edge đang thực hiện hai yêu cầu như trước đây.

Các vấn đề liên quan