Existe-t-il un moyen de forcer une boîte de dialogue de sauvegarde sous www.example.com/example.pdf dans ff? (Je ne peux pas changer les en-têtes)Comment forcer enregistrer comme boîte de dialogue dans firefox en plus de changer les en-têtes?
6
A
Répondre
2
La seule autre façon que je peux penser est de modifier les paramètres de Firefox. Je suppose que vous ne pouvez pas faire cela.
EDIT:
Je bricolé une solution côté client basée sur l'idée URI de données. Il utilise une version modifiée d'un base64 encoder et une technique pour binary XMLHTTPrequests Le script télécharge le fichier PDF, puis génère et place dynamiquement un lien d'URI de données à l'aide de l'encodeur base64.
Cela devrait être utile lorsque vous voulez coder un flux d'octets mais que vous n'avez pas accès au serveur (comme cela semble être le cas pour l'OP).
Remarque, je viens de poster an example en utilisant hunts.pdf, que l'OP testait avec.
/**
*
* Base64 encode/decode
* http://www.webtoolkit.info/
*
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr2raw, chr3, chr3raw, enc1, enc2, enc3, enc4;
var i = 0;
//input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++) & 0xFF;
chr2 = isNaN(chr2raw = input.charCodeAt(i++)) ? NaN : (chr2raw & 0xFF);
chr3 = isNaN(chr3raw = input.charCodeAt(i++)) ? NaN : (chr3raw & 0xFF);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
}
}
// http://web.archive.org/web/20071103070418/mgran.blogspot.com/2006/08/downloading-binary-streams-with.html
//fetches BINARY FILES synchronously using XMLHttpRequest
load_url = function(url) {
var req = new XMLHttpRequest();
req.open('GET',url,false);
//XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
if (req.status != 200){
alert(req.status);
return '';
}
return req.responseText;
}
function getDataURI(filename)
{
var file = load_url(filename);
var uueFile = Base64.encode(file);
var uri = 'data:application/octet-stream;base64,' + encodeURIComponent(uueFile);
return uri;
}
window.addEventListener("load",
function()
{
var link = getDataURI("foo.pdf");
document.getElementById("myDiv").innerHTML += '<a href="' + link + '"><code>' + link + '</code></a><br><br>';
}
non :(il semble que cela devrait être possible .... –
@raj: C'est exactement ce que les en-têtes sont pour le corps de la réponse est le contenu, les en-têtes sont une suggestion que faire avec (p.ex. . -disposition) – Piskvor
grâce à la solution que j'essayé d'utiliser le code est ici en bas du code je. window.addEventListener ("charge", fonction () { var link = getDataURI ("http : //www.google.com/ads/hunts.pdf "); document.getElementById (" myDiv ").innerHTML + =
'; }