Javascript execCommand SaveAs在Firefox中工作吗?

Javascript execCommand SaveAs在Firefox中工作吗?,javascript,firefox,google-chrome,bookmarklet,Javascript,Firefox,Google Chrome,Bookmarklet,为什么这在ff/chrome中不起作用 javascript: document.execCommand('SaveAs','true','http://www.google.com'); (用作bookmarklet)如“没有适用于此方法的公共标准。”execCommand在不同浏览器中没有完全标准化。实际上,execCommand('SaveAs',…)似乎仅在IE上受支持。强制另存为的建议方法是使用内容处置:附件标头,如中所述 因为这是HTTP头的一部分,所以可以在任何文件类型上使用它。

为什么这在ff/chrome中不起作用

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

(用作bookmarklet)

如“没有适用于此方法的公共标准。”

execCommand在不同浏览器中没有完全标准化。实际上,execCommand('SaveAs',…)似乎仅在IE上受支持。强制另存为的建议方法是使用内容处置:附件标头,如中所述

因为这是HTTP头的一部分,所以可以在任何文件类型上使用它。如果您使用的是apache,则可以使用.htaccess文件添加标题,如前所述。例如:

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

标题集内容处置“附件”
#对于较旧的浏览器
标题集内容类型“应用程序/八位字节流”

Firefox不支持execCommand。事实上,它似乎只是IE而已。

在Firefox中,可以通过(另请参阅)和可选的下载属性来实现这一点

有关HTML5垫片演示,请参阅

也涵盖了这个主题

您还可以通过以下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>

var a=document.createElement('a');
//警报(a.download=='');//如果是真的,这似乎表明支持
a、 setAttribute('download','testme.png');
a、 href='数据:图像/png;基于64、基于64、基于6、基于6、基于6、基于8、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于8、基于8、基于8、基于6、基于8、基于6、基于6、基于6、基于8、基于6、基于6、基于6、基于8、基于6、基于6、基于8、基于6、基于6、基于6、基于6、基于6、基于8、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于6、基于8、基于6、基于6、基于8、基于6、基于8、基于aaelftksuqmcc';
a、 innerHTML='测试';
a、 style.display='none';
文件.正文.附件(a);
a、 单击();
以下内容也适用于URL以及不带下载属性的JavaScript启动加载(尽管这种方法不允许文件名,但允许在新选项卡中预览):


var myText='Hello world!',
myHTML=''+myText+'';
函数openFile(textToEncode、contentType、newWindow){
//有关window.btoa(base64)多边形填充,请参见
// https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills
var encodedText=window.btoa(textToEncode);
var dataURL='数据:'+contentType+';base64'+encodedText;
if(newWindow){//对于应用程序/八位字节流类型不有用
window.open(dataURL);//在新选项卡/窗口中打开
}
否则{
window.location=dataURL;//更改当前页面
}
}
你好,世界档案:
在Firefox中提示下载对话框的八位字节流类型,但没有
默认文件类型或路径:

(HTML示例,来自JavaScript) 在浏览器中快速查看(和手动保存),但不显示对话框:

(来自JavaScript的文本示例) (文本示例,来自JavaScript;在新窗口中打开) (HTML示例,来自JavaScript;在新窗口中打开)
感谢您的回复。更具体地说,我正在尝试在我在web上拥有的pdf文件上强制另存为。在ff中有什么方法可以做到这一点吗?30分钟后由同一个用户完成:是否有类似的firefox功能?据我所知,您可能不想使用bdonlan建议的内容处置头。它(或者至少是
execCommand
,而不是
execCommand(saveAs)
)在Mozilla 1.3+中受支持。我正在尝试在pdf文件上强制另存为。我认为我不能更改标题我认为内容配置是HTTP标题的一部分,而不是文档的一部分,因此您应该能够将其用于pdf文件。确实可以,这里有一个例子:)哇,这是一个很棒的主意。谢谢你知道我可以做些什么来强制将pdf文件另存为服务器上的文件吗?但更严重的是,我不知道。试着打开另一个关于这个特定主题的问题,也许其他人会。循环提到不同的问题,我来自
<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>