¿Hay alguna manera de forzar un guardar como cuadro de diálogo para www.example.com/example.pdf en ff? (No puedo cambiar los encabezados)Cómo forzar guardar como cuadro de diálogo en Firefox además de cambiar los encabezados?
6
A
Respuesta
2
La única otra forma en que puedo pensar es modificar la configuración de Firefox. Supongo que no puedes hacer esto.
EDIT:
I remendado una solución del lado del cliente basado en la idea de URI de datos. Utiliza una versión modificada de de base64 encoder y una técnica para binary XMLHTTPrequests La secuencia de comandos descarga el archivo PDF, luego genera y coloca un enlace URI de datos dinámicamente utilizando el codificador base64.
Debería ser útil cuando desee codificación de secuencia de octetos pero no tenga acceso al servidor (como parece ser el caso para el OP).
Nota, acabo de publicar an example usando hunts.pdf, con el que estaba probando el OP.
/**
*
* 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>';
}
no :(parece que esto debería ser posible ... –
@raj: Para eso son exactamente los encabezados. El cuerpo de respuesta es el contenido, los encabezados son una sugerencia de qué hacer con él (p. Ej., Contenido . -Disposition) – Piskvor
gracias por la solución I trataron utilizando el código Aquí está la parte inferior del código utilicé:. window.addEventListener ("carga", función() { var link = getDataURI ("http : //www.google.com/ads/hunts.pdf "); document.getElementById (" myDiv ").innerHTML + = '
' + link + '
'; }