2009-05-07 3 views
7

왜 이것이 ff/chrome에서 작동하지 않습니까? (북마크로서 사용)execCommand SaveAs가 Firefox에서 작동합니까?

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

+0

더 구체적으로, 나는 웹에있는 PDF 파일에 save-as를 강제 실행하려고합니다. ff에서이 작업을 수행 할 수있는 방법이 있습니까? –

+0

30 분 후 동일한 사용자가 [어떻게 헤더를 변경하는 것 외에 Firefox에서 대화 상자를 강제로 저장합니까?] (http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog- box-in-firefox-outside-changing-headers) – hakre

답변

9

execCommand는 여러 브라우저에서 완전히 표준화되지 않았습니다. 실제로 execCommand ('SaveAs', ...)는 IE에서만 지원되는 것으로 보입니다. save-as를 강제로 수행하는 권장 방법은 콘텐츠 처리 : 첨부 헤더를 사용하는 것입니다. http://www.jtricks.com/bits/content_disposition.html

이것은 HTTP 헤더의 일부이므로 모든 파일 유형에서 사용할 수 있습니다. 아파치를 사용하는 경우 here과 같이 .htaccess 파일을 사용하여 헤더를 추가 할 수 있습니다. 예 :

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

나는 pdf 파일에서 save-as를 강제 실행하려고 시도하고있다. 나는 내가 헤더를 바꿀 수 있다고 생각하지 않는다. –

+0

나는 콘텐트 처리가 문서의 일부가 아닌 HTTP 헤더의 일부라고 생각한다. 그래서 당신은 pdf 파일을 위해 그것을 사용할 수 있어야한다. – Andrej

+0

실제로 할 수 있습니다. 여기에 그 예가 나와 있습니다. – bdonlan

0

Firefox는 execCommand를 지원하지 않습니다. 사실 그것은 IE 전용 인 것 같습니다.

+0

비슷한 파이어 폭스 기능이 있습니까? –

+0

내가 아는 바가 없다면 bdonlan이 제안한대로 내용 처리 헤더를 사용하는 것이 좋습니다. –

+0

Mozilla 1.3+ – Rup

8

data URIs (Download data url file 참조) 및 선택적으로 다운로드 속성을 통해 Firefox에서이를 수행 할 수 있습니다.

HTML5 심 데모는 http://html5-demos.appspot.com/static/a.download.html을 참조하십시오.

How to force save as dialog box in firefox besides changing headers?도이 주제를 다룹니다.

Firefox 테스트를 거친 다음 데모로 테스트 할 수도 있습니다.

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

<!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> 
다음은 또한 다운로드 속성없이 자바 스크립트를 시작 부하뿐만 아니라 URL에 대한 작동

(이 방법은 파일 이름을 허용하지 않습니다하지만, 그것은 새 탭에서 미리보기가 가능하지 않습니다) 답변을 주셔서 감사합니다.

+0

에서 지원되는대로 (또는 'execCommand (saveAs)'가 아닌) (또는 적어도 execCommand()가 [MDN에 문서화 됨] (https://developer.mozilla.org/en/rich-text_editing_in_mozilla) 루프 있음 다른 질문을 언급, 나는 [어떻게 머리글을 변경 게다가 파이어 폭스에서 대화 상자로 강제로 저장?] (http://stackoverflow.com/questions/833068/how-to-force-save-as-dialog-box-in -firefox-outside-changing-headers) – Juto