如何在Firefox中忽略“Content-Disposition: attachment”?

29
我该如何使Firefox忽略Content-Disposition: attachment标头?
我觉得很烦人的是,当我想要在浏览器中查看图片时,它要求我下载它。我并不想下载文件,我只想在浏览器中查看它。如果浏览器没有插件来处理它,那么它应该要求我下载。
例如,我已经安装了Adobe Acrobat Reader作为Firefox的插件。我点击PDF链接时,它要求我保存它,但它应该使用插件在浏览器中打开。如果服务器没有在响应中发送Content-Disposition: attachment标头,则会出现这种行为。
Firefox 3.6.6 Windows XP SP3

选择“使用Acrobat Reader打开”并获得一个Acrobat Reader窗口有什么问题吗?这只会将文件保存到您的临时目录中,就像在浏览器中打开它一样。 - Borealid
3
简单来说,它只是使用了太多窗口。请参见下面。 - mctom987
@Borealid 我记得 pdfplugin 曾经可以在文件被获取时显示它(无需先获取所有/下载它,然后再显示它)。 - aularon
7个回答

12

2
这是避免弹出窗口询问是否保存或打开文件的解决方案,勾选“不再询问”框(即使它仍在询问你它声称不会问的问题)。它通过更改Content-Disposition头来实现,从而使浏览器按照您的选择执行特定操作而无需询问,即尊重您的选择。 - Malvineous
2
这是一个更干净的解决方案,避免了弹出窗口。下面是一个与Firefox Quantum兼容的更新版本: https://addons.mozilla.org/zh-CN/firefox/addon/inlinedisposition-reloaded - mrtumnus

11

我在你回答之前就已经找到了这个扩展,但那就是我最终所做的。 - LatinSuD
刚试图安装这个扩展程序,它要求访问浏览历史和其他不必要的东西。这可能是作者的疏忽,或者是企图从用户的私人数据中赚钱。在后一种情况下,我们需要寻找替代方案... - Mikhail T.
2
您可以检查源代码来查看为什么需要特定的权限-快速搜索表明它仅用于从历史记录中删除自己的条目。虽然我没有彻底审查过它,但我认为您的担忧是没有根据的——这似乎是扩展系统的问题,而不是特定扩展的问题。 - Nickolay

1

今晚我也发现了这个,它完全阻止了Firefox在你的桌面上留下下载文件。它实际上是MAC中隐藏的/ private / temp文件夹的重定向修复程序。天才。

你可以通过将[Firefox的]下载目录更改为/tmp来模仿Windows行为。

要执行此操作,请打开 Firefox的常规首选项窗格,在保存下载的文件到下选择[选择]...。在出现的对话框中,按下 Shift-Command-G以打开 前往文件夹对话框。

在此对话框中,只需键入/tmp,然后单击确定,然后在主窗口中单击选择


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文件直接在Firefox中安装此插件。如果您想禁用“Content-Disposition”修改,则只需停用该添加程序;-)。

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


0

这就是“附件”类型的目的。

默认行为(当标题不存在时)应该是内联显示。

也许你的浏览器或阅读器插件存在配置问题?


1
不需要插件,Firefox可以直接处理图像。我的意思是我不想下载它,我只想看到它。这样做的最大原因是防止打开过多的窗口。 通常,我点击链接,查看文件。但在某些情况下(如下载此图像),会打开一个新窗口“您的下载即将开始”,其中会打开Firefox对话框(是的,我知道我可以跳过此步骤),所以我选择“使用...打开”,文件下载完成后程序就会打开。把这些加起来,对于其他所有情况都只有1个窗口,而这里却有5个。 - mctom987
再次确认您的读取器插件是否已正确配置(尝试另一台机器?)。检查HTTP跟踪(标题是否真正存在)。最好提供一个演示问题的测试用例。 - Julian Reschke
17
网站正在添加页眉,以表明希望您下载它。如果像其他数千个操作一样(例如在新标签页中打开,阻止JavaScript等),让浏览器允许您覆盖它是完全合理的。 - Draemon

0
你可以编写一个Firefox扩展程序,以删除PDF文件的处理标题。这是一个相当简单的扩展程序。

0
对于PDF文件,有一个名为PDF-Download的插件,它会覆盖任何下载PDF文件的尝试,并让用户决定如何下载(内联、保存、外部等)。你可能还可以修改它以适用于其他文件类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接