5

데이터의 백업 파일을 다운로드 할 수있는 Google 크롬 확장 프로그램을 작성 중입니다. 사용자가 버튼을 누를 수있게하고 "다른 이름으로 저장"대화 상자를 열어 파일을 컴퓨터에 저장할 수있게하려고합니다. 아무것도 작동하는 것처럼 보이지 않고 인터넷에서 응답을 찾지 못했습니다. 이 명령은 IE 전용이며 데이터의 URI를 사용하여 웹킷 - 대안 Google 크롬 확장 프로그램에서 강제 다운로드

  • 있을 나타나지 않기 때문에 작동하지 않습니다 document.execCommand('SaveAs', null, 'filename.json');이 사용

    1. : 나는 여러 가지 방법을 시도했습니다. 이것은 오페라와 파이어 폭스에서 가장 유망하고 효과적 이었지만 문제는 크롬이나 사파리가 URI에서 Content-disposition = attachment; -header를 지원하지 않는 것입니다. 이 이어야합니다. (Chrome에서 데이터 URI의 페이지 ctrl/cmd+s도 허용하지 않음)
    2. XMLHTTPRequest을 사용합니다. 나는 이것을 시도하지 않았지만 요청을 전달할 수있는 방법이 있어야만합니까? 외부 서버를 사용하고 싶지는 않습니다 (이 경우 단순히 POST 요청을 보내고 Content-disposition을 적용 할 수 있습니다 : -header)
    3. 사용 가능한 Chrome 확장 API 사용. 그러나이 목적을 위해 아무 것도없는 것처럼 보입니다.

    외부 서버를 사용하고 싶지 않은 이유는 호스팅 비용을 지불하고 싶지 않기 때문에 전송 된 데이터가 사용자에게 민감 할 수 있으므로 누군가의 프라이버시 침해.

    누구든지 작동하도록합니까?

  • +2

    내가 아마 장님 http://stackoverflow.com/questions/4003352/chrome-extension-download-export-content-created-on-the-fly – serg

    답변

    3

    Github의 Appmator 코드에서 다음과 같이했습니다.

    기본적인 접근 방법은 Blob을 빌드하는 것입니다 (Chrome/WebKit/Firefox에는 XmlHttpRequest에 responseBlob이 있으므로 사용 가능). iframe (숨김, 표시 : 없음)을 만든 다음 iframe이 Blob이 될 수 있습니다.

    이렇게하면 다운로드가 시작되고 파일 시스템에 저장됩니다. 유일한 문제는 파일 이름을 아직 설정할 수 없다는 것입니다.

    var savaeas = document.getElementById("saveas"); 
    var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)(); 
    
    var output = Builder.output({"binary":true}); 
    var ui8a = new Uint8Array(output.length); 
    
    for(var i = 0; i< output.length; i++) { 
        ui8a[i] = output.charCodeAt(i); 
    } 
    
    bb.append(ui8a.buffer); 
    
    var blob = bb.getBlob("application/octet-stream"); 
    var saveas = document.createElement("iframe"); 
    saveas.style.display = "none"; 
    
    if(!!window.createObjectURL == false) { 
        saveas.src = window.webkitURL.createObjectURL(blob); 
    } 
    else { 
        saveas.src = window.createObjectURL(blob); 
    } 
    
    document.body.appendChild(saveas); 
    
    +0

    볼 수 있지만 정확히 어디에 블롭 창조는 정확히 당신의 코드에서? 어디서 URL에 넣을 수 있습니까 (또는 xmlhttprequest)? –

    +0

    이 코드는 실제로 오래되었지만 BlobBuilder 및 bb.append()를 통해 전송되었습니다 – Kinlan

    +0

    ... "오래된 코드가 아닌"코드로 어떻게 수행합니까? (Google을 통해이 답변을 찾았습니다 ...) –

    관련 문제