2010-07-15 65 views
17

如何導致Firefox 忽略Content-Disposition: attachment頭? 我發現它絕對令人討厭,我無法在瀏覽器中查看圖像,因爲它要求我下載它。如何忽略Firefox中的「Content-Disposition:attachment」

我不想下載該文件,我只是想在瀏覽器中查看它。如果瀏覽器沒有插件來處理它,然後它應該要求下載。

E.g.我已安裝Adobe Acrobat Reader作爲Firefox的插件。我點擊一個PDF鏈接,它會要求我保存它,當它在瀏覽器中使用插件打開時。這是如果服務器在響應中未發送Content-Disposition: attachment標頭的行爲。

火狐3.6.6 的Windows XP SP3

+0

什麼是錯與選擇 「打開方式:Acrobat Reader軟件」,卻得到了Acrobat Reader軟件窗口?這隻會將文件保存到臨時目錄,就像您在瀏覽器中打開它一樣。 – Borealid 2010-07-15 00:20:28

+2

簡單地說,它只是使用太多的窗口。見下文。 – mctom987 2010-07-15 21:44:28

+0

@Borealid我記得pdfplugin用於顯示文件,因爲它正在被提取(不必全部獲取/下載它,然後顯示它)。 – aularon 2010-09-09 10:04:49

回答

6

"Open in browser" extension對於瀏覽器本機支持的格式非常有用,不確定關於PDF。

+0

在你回答之前,我已經找到了這個擴展名,但這就是我終於做到的。 – LatinSuD 2010-09-14 21:05:51

0

嗯,這是性格類型 「附件」 的目的。

默認行爲(當標題不存在時)應該是內聯顯示的。

也許您的瀏覽器或Reader插件存在配置問題?

+1

那麼,圖像直接由Firefox處理;沒有插件。我說的是我不想下載它,我只是想看到它。 這樣做的最大原因是防止打開多餘的窗口。 通常,我點擊一個鏈接,看文件。但在某些情況下(如下載此圖像)打開一個新窗口「您的下載將很快開始」,打開一個Firefox對話框(是的,我知道我可以跳過這個),所以我選擇「打開」,文件下載,然後是程序打開。把這些數起來。這是其他所有情況下爲1的5個窗口。 – mctom987 2010-07-15 21:43:09

+0

再次:檢查您的閱讀器插件配置是否正確(嘗試另一臺計算機?)。檢查HTTP Trace(是否真的存在)。最好提供一個能夠證明問題的測試案例。 – 2010-07-19 14:43:17

+14

*網站*添加標題說*它*希望你下載它。希望瀏覽器能夠讓你覆蓋這一點是非常合理的(就像它爲成千上萬的其他操作一樣:在新標籤中打開,阻止javascript等)。 – Draemon 2010-07-20 12:46:49

0

轉到工具>選項>應用程序並更改下拉選項總是詢問有一定的內容類型的默認應用程序,以你的口味有關

+2

但他希望它直接在瀏覽器中打開,而不是外部應用程序。 – Draemon 2010-09-09 09:52:15

0

你可以編寫一個Firefox擴展,刪除PDF文件的處置標題。這將是一個相當簡單的擴展。

0

對於PDF文件,有一個名爲PDF-Download的插件,它覆蓋了任何嘗試下載PDF並讓用戶決定他們想要下載的內容(內聯,保存,外部等)。您可能可以修改它以適用於其他文件類型。

9

This是您想要解決此問題的Firefox插件。

+2

這是避免那些彈出窗口要求您保存或打開文件的解決方案,並勾選了「不要問這個問題」框(即使它問你聲稱它不會問的問題)。更改Content-Disposition標題,以便從瀏覽器獲得所需的行爲,即尊重您的選擇,即始終希望執行特定操作而不會被要求執行。 – Malvineous 2015-03-18 01:43:13

0

我也found this今晚,完全防止火狐扔垃圾你的桌面下載。它實際上是對MAC中隱藏/私人/臨時文件夾的重定向修復。天才。

你可以簡單地通過改變[Firefox的] 下載目錄/tmp模仿Windows的行爲。

要做到這一點,開放Firefox's General preferences窗格,Save Downloaded Files To下,選擇[選擇] ....在出現的對話框中, 打Shift-Command-G,彈出對話框Go to Folder

在此對話框中,只需鍵入/tmp,點擊OK,然後在 主窗口中點擊Select

0

因爲我在尋找一個解決方案,並且沒有可用的附加組件實際上與我的Firefox 31.0(Ubuntu)工作,所以我決定嘗試創建我自己的附加組件。

代碼如果你想存檔一個類似的目標或只是想知道它是如何工作的。

console.log("starting addon to disable content-disposition..."); 

//getting necessary objects 
var {Cc, Ci} = require("chrome"); 

//creating the observer object which alters the Content-Disposition header to inline 
var httpResponseObserver = { 
    //gets fired whenever a response is getting processed 
    observe: function(subject, topic, data) { 
     if (topic == "http-on-examine-response") { 
      var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); 
      httpChannel.setResponseHeader("Content-Disposition", "inline", false); 
     } 
    }, 
    //needed for this.observerServer.addObserver --> without addObserver will fail 
    get observerService() { 
     return Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); 
    }, 
    //used to register with an observer 
    register: function() { 
     console.log("register with an observer to get response-events"); 
     this.observerService.addObserver(this, "http-on-examine-response", false); 
    }, 
    //used to unregister from the observer 
    unregister: function() { 
     console.log("unregister from observer"); 
     this.observerService.removeObserver(this, "http-on-examine-response"); 
    } 
}; 

//gets called at enable or install of the add-on 
exports.main = function(options, callbacks) { 
    console.log("content-dispostion main method got invoked"); 
    //call register to make httpResponseObserver.observe get fired whenever a response gets processed 
    httpResponseObserver.register(); 
}; 

//gets called on disable or uninstall 
exports.onUnload = function(reason) { 
    console.log("content-dispostion unloaded"); 
    //unregister from observer 
    httpResponseObserver.unregister(); 
}; 

/* 

//not needed!!! just test code for altering http-request header 

var httpRequestObserver = 
{ 
    observe: function(subject, topic, data) 
    { 
    console.log("in observe..."); 
    console.log("topic is: " + topic); 
    if (topic == "http-on-modify-request") { 
     var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); 
     httpChannel.setRequestHeader("X-Hello", "World", false); 
    } 
    }, 

    get observerService() { 
    return Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); 
    }, 

    register: function() 
    { 
    this.observerService.addObserver(this, "http-on-modify-request", false); 
    }, 

    unregister: function() 
    { 
    this.observerService.removeObserver(this, "http-on-modify-request"); 
    } 
}; 
httpRequestObserver.register(); 
*/ 

作爲替代方案,您可以讓我的xpi-File在Firefox中直接安裝插件。如果你想禁用「Content-Disposition」修改,只需關閉附加組件;-)。

http://www.file-upload.net/download-9374691/content-disposition_remover.xpi.html