2012-10-30 39 views
20

在我們的移動Web應用程序中下載(或嘗試下載)PDF格式時,Chrome會收到以下消息。在Chrome上加載PDF時遇到問題

「警告:有些東西不是在這裏!...您試圖訪問的網站表現奇怪,Chrome無法驗證網址是否正確。」

這在Safari中正常工作,基本上我們正在這樣做。

  1. 載入中打電話確認我們要顯示的文檔是否正確。
    • 如果文件不是OK消息的用戶,然後關閉該標籤
  2. 直接將標籤定位到其下載PDF的地址。

沒有發佈太多的代碼中的JavaScript是這樣的:

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;   
} 

由GenerateHREF提供的URL是相同的始發站點,是相對於原始。
mime類型設置爲application/pdf。 內容處置設置爲內聯。我試過設置內容大小標題,但它似乎沒有任何效果。

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

我錯過了什麼...只是什麼?

+0

我目前猜測它與彈出式窗口攔截有關,在Chrome瀏覽器開始顯示鏈接之前立即添加用戶交互。 – DuStorm

+0

雖然不是專門針對ios Chrome的回答遠程調試將有所幫助。 http://stackoverflow.com/questions/11262236/chrome-for-ios-remote-debugger – DuStorm

+0

我認爲這是一個鉻bugg,請參閱此鏈接:http://code.google.com/p/chromium/issues/ detail?id = 85549,關於Content-Length。 – joao

回答

0

如果是彈出/下載問題,您可以使用iframe顯示它?

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

我也認爲彈出的行爲是犯罪嫌疑人的名單上可能高()特別是window.close(;行似乎是相當可疑的,特別是如果在彈出被用戶阻止)。

然而,由於最終的目標是要下載的文件,你可以嘗試改變響應頭到

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

或者你可以嘗試強制所有PDF特定文件夾逼通過.htaccess文件下載,然後通過您正在使用的location.href鏈接到它們:

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

嘗試將文檔解析到base64並添加到您的文檔或iframe中。

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);