开发者

How to ignore "Content-Disposition: attachment" in Firefox

How can I cause Firefox to ignore the Content-Disposition: attachment header? I find it absolutely annoying that I can't view an image in the browser, because it asks me to download it.

I don't want to download the file, I just want to view it in the browser. If the browser doesn't have a plugin to handle it, then it should ask to download.

E.g. I have Adobe Acrobat Reader installed as a plugin for Firefox. I click a l开发者_运维知识库ink to a PDF, and it asks me to save it, when it should open in the browser using the plugin. This is the behaviour if the server does not send the Content-Disposition: attachment header in the response.

Firefox 3.6.6 Windows XP SP3


Legacy InlineDisposition 1.0.2.4 by Kai Liu can fix this problem.

In the Classic Add-ons Archive at:

  • caa:addon/inlinedisposition


The "Open in browser" extension is useful for formats supported natively by the browser, not sure about PDF.

Legacy version 1.18 (for users of browsers such as Waterfox Classic) is in the Classic Add-ons Archive at:

  • caa:addon/open-in-browser


Well, that's the purpose of disposition type "attachment".

The default behavior (when the header is absent) should be to display in-line.

Maybe there's a configuration problem in your browser, or the Reader plugin?


For PDFs there is an addon called PDF-Download which overrides any attempt to download a PDF and lets the user decide how they want it downloaded (inline, save, external, etc). You could probably modify it to work for other filetypes too.


You could write a firefox extension that removes the disposition header for PDF files. This would be a fairly simple extension.


I also found this tonight that totally prevents Firefox from littering your desktop with downloads. It's actually a redirect fix to the hidden /private/temp folder in MAC. Genius.

You can mimic the Windows behaviour simply by changing [Firefox's] download directory to /tmp.

To do this, open Firefox's General preferences pane, under Save Downloaded Files To select [choose].... In the dialog that appears, hit Shift-Command-G to bring up the Go to Folder dialog.

In this dialog, simply type /tmp, hit OK, then hit Select in the main window.


Since I was looking for a solution and no available add-on was actually working with my Firefox 31.0 (Ubuntu) I decided to try creating my own add-on.

The code if you want to archive a similar goal or just want to know how it works.

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();
*/

As an alternative you can get my xpi-File to directly install the add-on in Firefox. If you want to disable the "Content-Disposition" altering just deactivate the add-on ;-).

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜