2012-10-30 6 views
20

Chúng tôi nhận được thông báo sau từ Chrome khi tải xuống (hoặc cố gắng tải xuống) bản pdf trong ứng dụng web di động của chúng tôi.Sự cố khi tải PDF trên Chrome IOS

"Cảnh báo: Có gì đó không đúng ở đây! ... Trang web bạn đang cố gắng truy cập diễn xuất lạ và Chrome không thể xác minh rằng URL là chính xác".

Điều này hoạt động tốt trong Safari và về cơ bản chúng tôi đang thực hiện việc này.

  1. Khi đang thực hiện cuộc gọi để xác minh rằng tài liệu mà chúng tôi muốn hiển thị là OK.
    • nếu tài liệu không phải là thông điệp ok người sử dụng và sau đó đóng tab
  2. Direct tab để di chuyển đến một địa chỉ mà tải các PDF.

Nếu không đăng quá nhiều mã Javascript là một cái gì đó như thế này:

DoRequest ("print_report", 
      "VALIDATE", 
      mycallback); 

function mycallback (data,error) { 

    var h_href = ""; 
    var h_widget = ""; 

    if(error == true) { 
     window.close(); 
     return; 
    }  

    h_href = GenerateHREF("print_report", "PRINT"); 

    window.location.href = h_href;   
} 

Các URL được cung cấp bởi GenerateHREF là for the originating site cùng và là tương đối so với bản gốc.
loại mime được đặt thành ứng dụng/pdf. Bố cục nội dung được đặt thành nội tuyến. Tôi cũng đã thử đặt tiêu đề kích thước nội dung nhưng dường như không có hiệu ứng nào.

Content-Disposition: attachment; filename="pp66.26.pdf" 
Content-Length: 31706 
Content-Type: application/pdf 

Tôi đang thiếu thứ gì đó ... chỉ là cái gì?

+0

Tôi hiện đang đoán rằng nó liên quan đến chặn cửa sổ bật lên, bằng cách thêm tương tác người dùng ngay trước khi điều hướng Chrome bắt đầu hiển thị liên kết. – DuStorm

+0

Trong khi không cụ thể là câu trả lời gỡ lỗi từ xa cho ios Chrome sẽ giúp đỡ. http://stackoverflow.com/questions/11262236/chrome-for-ios-remote-debugger – DuStorm

+0

Tôi nghĩ đây là một bugg chrome, xem liên kết này: http://code.google.com/p/chromium/issues/ chi tiết? id = 85549, nội dung về Độ dài nội dung. – joao

Trả lời

0

Nếu đó là sự cố bật lên/tải xuống, bạn có thể hiển thị nó bằng iframe?

<iframe src="downloads/report.pdf"></iframe> 
0

Tôi cũng nghĩ rằng hành vi bật lên có thể cao trong danh sách các nghi phạm (cụ thể là window.close(); dòng có vẻ khá đáng ngờ, đặc biệt nếu cửa sổ bật lên bị chặn bởi người dùng).

Tuy nhiên, vì mục đích cuối cùng là để tải về các tập tin, bạn có thể thử thay đổi các tiêu đề phản ứng để

Content-Disposition: attachment; filename="pp66.26.pdf" 
Content-Length: 31706 
Content-Type: applicaton/octet-stream 

hoặc bạn có thể thử buộc tất cả các file PDF trong một thư mục cụ thể để buộc một tải về thông qua tập tin .htaccess , sau đó chỉ cần liên kết với chúng thông qua location.href bạn đang sử dụng:

<FilesMatch "\.pdf$"> 
ForceType applicaton/octet-stream 
Header set Content-Disposition attachment 
</FilesMatch> 
1

Cố gắng phân tích cú pháp tài liệu thành base64 và thêm vào tài liệu hoặc khung nội tuyến của bạn.

function getAsyncBase64(fileName, callBack){ 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', fileName, true); 
     xhr.responseType = 'arraybuffer'; 
     xhr.onload = function (e) { 
     if (this.status == 200) { 
      var uInt8Array = new Uint8Array(this.response || this.responseText); 
      var i = uInt8Array.length; 
      var binaryString = new Array(i); 
      while (i--) { 
       binaryString[i] = String.fromCharCode(uInt8Array[i]); 
      } 
      var dataBinary = binaryString.join(''); 
      var data64 = window.btoa(dataBinary); 
      callback(data64);     
     } 
     xhr.send(); 
    }; 
    function callback(base64){ 
     window.open(base64, "_blank"); 
     //or 
     iframe.src = "data:application/pdf;base64,"+ base64; 
    }; 

    getAsyncBase64(url,callback);