Perché questo non funziona in ff/chrome?execCommand SaveAs funziona in Firefox?
javascript: document.execCommand('SaveAs','true','http://www.google.com');
(usato come bookmarklet)
Perché questo non funziona in ff/chrome?execCommand SaveAs funziona in Firefox?
javascript: document.execCommand('SaveAs','true','http://www.google.com');
(usato come bookmarklet)
execCommand non è completamente standardizzato tra i browser. Infatti, execCommand ('SaveAs', ...) sembra essere supportato su IE. Il metodo consigliato per forzare un salvataggio, come sarebbe utilizzare un'intestazione content-disposition: attachment, come descritto in http://www.jtricks.com/bits/content_disposition.html
Poiché questo fa parte dell'intestazione HTTP, è possibile utilizzarlo su qualsiasi tipo di file. Se utilizzi apache, puoi aggiungere intestazioni utilizzando il file .htaccess, come descritto here. Ad esempio:
<FilesMatch "\.pdf$">
<IfModule mod_headers.c>
Header set Content-Disposition "attachment"
# for older browsers
Header set Content-Type "application/octet-stream"
</IfModule>
</FilesMatch>
sto provando a forzare un salvataggio, come su un file pdf. non penso di poter cambiare le intestazioni –
Penso che la disposizione del contenuto sia parte dell'intestazione HTTP, non parte del documento, quindi dovresti essere in grado di usarlo per i file pdf. – Andrej
In effetti puoi, ed ecco un esempio di questo :) – bdonlan
Come Microsoft puts it, "non esiste uno standard pubblico che si applica a questo metodo."
Firefox non supporta execCommand. In realtà sembra essere solo IE.
esiste una funzione firefox simile? –
non che io sappia, vorrete usare l'intestazione content-disposition come suggerisce bdonlan. –
It (o almeno 'execCommand', non' execCommand (saveAs) ') è [documentato su MDN] (https://developer.mozilla.org/en/rich-text_editing_in_mozilla) come supportato in Mozilla 1.3+ – Rup
È possibile farlo in Firefox tramite data URIs (vedere anche Download data url file) e facoltativamente tramite l'attributo di download.
Vedere http://html5-demos.appspot.com/static/a.download.html per una demo di shim HTML5.
How to force save as dialog box in firefox besides changing headers? copre anche questo argomento.
È anche possibile testarlo dalla seguente demo testata da Firefox.
<!DOCTYPE html>
<body>
<script>
var a = document.createElement('a');
//alert(a.download === ''); // If true, this seems to indicate support
a.setAttribute('download', 'testme.png');
a.href = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jWNgGPRgv7Y2z0lj45STpqbHT5iaxhCt8biBgcJJU9PZJ01MPp80MfkPxZOJN8DEpAFJ4/+TJib/T5mY7CdK8wkTkwJ0zVA8naDmk0ZGPjg0/z9hbGyDV/MZY2ORkyYm77FpPmVispwSp6/e7+DAQtj5pqabsdi8myjNUANmY7H99jEjIxWiDDhuauqCxYDD+7W1eYgy4IyxMetJE5PpyH4/ZWqqTZRmGIAm3fsk2YwOjhkZqZCtmVQAAIOlmIi0XoodAAAAAElFTkSuQmCC';
a.innerHTML = 'testing';
a.style.display = 'none';
document.body.appendChild(a);
a.click();
</script>
Di seguito funziona anche per gli URL, così come i carichi JavaScript-avviate senza l'attributo download (anche se questo approccio non consente un nome di file, se non è permessa in anteprima in una nuova scheda):
<script>
var myText = 'Hello world!',
myHTML = '<b>'+myText+'</b>';
function openFile (textToEncode, contentType, newWindow) {
// For window.btoa (base64) polyfills, see
// https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills
var encodedText = window.btoa(textToEncode);
var dataURL = 'data:' + contentType + ';base64,' + encodedText;
if (newWindow) { // Not useful for application/octet-stream type
window.open(dataURL); // To open in a new tab/window
}
else {
window.location = dataURL; // To change the current page
}
}
</script>
<h1>Hello world files:</h1>
<p>Octet stream type to prompts download dialog in Firefox, but with no
default file type or path:</p>
<a href="data:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D">
(text example)</a>
<a href="data:application/octet-stream;base64,PGI+SGVsbG8gd29ybGQhPC9iPg==">
(HTML example)</a>
<button onclick="openFile(myHTML, 'application/octet-stream');">
(HTML example, from JavaScript)</button>
<p>Quickly viewable (and manually savable) in browser but no dialog presented:</p>
<a href="data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D">(plain text, same window)</a>
<a href="data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D" target="new-tab">
(plain text--in new tab)</a>
<a href="data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E">(HTML, same window)</a>
<button onclick="openFile(myText, 'text/plain');">
(text example, from JavaScript)</button>
<button onclick="openFile(myText, 'text/plain', true);">
(text example, from JavaScript; open in new window)</button>
<button onclick="openFile(myHTML, 'text/html', true);">
(HTML example, from JavaScript; open in new window)</button>
Loop in menzionando diverse domande, sono venuto da [Come forzare salvare come finestra di dialogo in Firefox oltre a cambiare le intestazioni?] (http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog-box-in -firefox-oltre-cambia-header) – Juto
grazie per le risposte. per essere più specifico, sto cercando di forzare un salvataggio, come su un file pdf che ho sul web. c'è un modo per farlo in ff? –
No 30 minuti dopo dallo stesso utente: [Come forzare il salvataggio come finestra di dialogo in firefox oltre a modificare le intestazioni?] (Http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog- box-in-firefox-Oltre-cambiando-intestazioni) – hakre