2009-05-07 21 views
7

Tại sao tính năng này không hoạt động trong ff/chrome?execCommand SaveAs có hoạt động trong Firefox không?

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

(sử dụng như một bookmarklet)

+0

cảm ơn câu trả lời. cụ thể hơn, tôi đang cố gắng để lưu một tệp pdf mà tôi có trên web. là có cách nào tôi có thể làm điều này trong ff? –

+0

Không 30 phút sau đó bởi cùng một người dùng: [Làm thế nào để lực lượng tiết kiệm như hộp thoại trong firefox bên cạnh việc thay đổi tiêu đề?] (Http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog- box-in-firefox-bên cạnh-thay đổi-tiêu đề) – hakre

Trả lời

9

execCommand không được chuẩn hóa hoàn toàn trên các trình duyệt. Thật vậy, execCommand ('SaveAs', ...) dường như chỉ được hỗ trợ trên IE. Cách được đề xuất để buộc lưu dưới dạng sử dụng bố cục nội dung: tiêu đề đính kèm, như được mô tả trong http://www.jtricks.com/bits/content_disposition.html

Vì đây là một phần của tiêu đề HTTP, bạn có thể sử dụng nó trên bất kỳ loại tệp nào. Nếu bạn đang sử dụng apache, bạn có thể thêm tiêu đề bằng tệp .htaccess, như được mô tả here. Ví dụ:

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

tôi đang cố gắng để buộc một lưu-như trên một tập tin pdf. Tôi không nghĩ rằng tôi có thể thay đổi tiêu đề –

+0

Tôi nghĩ rằng bố cục nội dung là một phần của tiêu đề HTTP, không phải là một phần của tài liệu, vì vậy bạn sẽ có thể sử dụng nó cho các tệp pdf. – Andrej

+0

Thật vậy, bạn có thể, và đây là một ví dụ về điều đó :) – bdonlan

3

Như Microsoft puts it, "Không có tiêu chuẩn nào áp dụng cho phương pháp này."

0

Firefox không hỗ trợ execCommand. Trong thực tế nó có vẻ là chỉ có IE.

+0

có chức năng firefox tương tự không? –

+0

không phải là tôi biết, bạn sẽ muốn sử dụng tiêu đề bố trí nội dung như bdonlan đề xuất. –

+0

Nó (hoặc ít nhất là 'execCommand', không phải' execCommand (saveAs) ') được [tài liệu trên MDN] (https://developer.mozilla.org/en/rich-text_editing_in_mozilla) như được hỗ trợ trong Mozilla 1.3+ – Rup

8

Có thể thực hiện việc này trong Firefox qua data URIs (xem thêm Download data url file) và tùy chọn thông qua thuộc tính tải xuống.

Xem http://html5-demos.appspot.com/static/a.download.html để có bản demo HTML5 shim.

How to force save as dialog box in firefox besides changing headers? cũng đề cập đến chủ đề này.

Bạn cũng có thể kiểm tra bằng bản trình diễn thử nghiệm Firefox sau đây.

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

Sau đây cũng làm việc cho URL cũng như tải JavaScript khởi xướng mà không có thuộc tính tải (mặc dù phương pháp này không cho phép một tên tập tin, nó không cho phép một bản xem trước trong một tab mới):

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

Vòng lặp trong đề cập đến các câu hỏi khác nhau, tôi đến từ [Làm thế nào để lực lượng tiết kiệm như hộp thoại trong firefox bên cạnh việc thay đổi tiêu đề?] (http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog-box-in -firefox-bên cạnh-thay đổi-tiêu đề) – Juto

Các vấn đề liên quan