Question

Pourquoi cela ne fonctionne-t-il pas dans ff / chrome?

javascript: document.execCommand('SaveAs','true','http://www.google.com');

(utilisé comme bookmarklet)

Était-ce utile?

La solution

execCommand n'est pas complètement normalisé sur tous les navigateurs. En effet, execCommand ('SaveAs', ...) ne semble être supporté que par IE. La méthode recommandée pour forcer un enregistrement dans l’enregistrement consiste à utiliser un en-tête content-disposition: attachment, comme décrit dans http://www.jtricks.com/bits/content_disposition.html

Comme cela fait partie de l’en-tête HTTP, vous pouvez l’utiliser sur n’importe quel type de fichier. Si vous utilisez apache, vous pouvez ajouter des en-têtes à l'aide du fichier .htaccess, comme décrit ici . Par exemple:

<FilesMatch "\.pdf<*>quot;>
<IfModule mod_headers.c>
Header set Content-Disposition "attachment"
# for older browsers
Header set Content-Type "application/octet-stream"
</IfModule>
</FilesMatch>

Autres conseils

Il est possible de le faire dans Firefox via URI de données (voir Télécharger le fichier d'URL des données ) et éventuellement via l'attribut de téléchargement.

Voir http://html5-demos.appspot.com/static/ a.download.html pour une démo HTML5 shim.

Comment forcer la sauvegarde sous La boîte de dialogue de Firefox, en plus de changer d’en-tête? , couvre également ce sujet.

Vous pouvez également le tester à l'aide de la démonstration suivante testée par 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>

Ce qui suit fonctionne également pour les URL ainsi que pour les chargements initiés par JavaScript sans attribut de téléchargement (bien que cette approche n'autorise pas le nom de fichier, elle autorise un aperçu dans un nouvel onglet):

<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>

Comme Microsoft l'exprime , "Il n'y a pas de public norme applicable à cette méthode. "

Firefox ne supporte pas execCommand. En fait, cela semble être uniquement pour IE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top