5

データのバックアップファイルをダウンロードできるGoogle Chrome拡張機能を作成しています。私は、ユーザーがボタンを押すことができ、 "名前を付けて保存"ダイアログボックスが開き、ファイルを自分のコンピュータに保存できるようにしたい。何も動作していないと私はインターネット上で答えを見つけていない。このコマンドはIEのみで、データのURIを使用してのWebkit、代替 Google Chrome拡張機能で強制ダウンロード

  • があるように表示されないため動作しませんdocument.execCommand('SaveAs', null, 'filename.json');これを使用して

    1. :私はいくつかのアプローチを試してみました。これはOperaとFirefoxで最も有望で働いていましたが、ChromeやSafariのどちらもURIのContent-disposition = attachment; -headerをサポートしていないように見えるという問題がありました。このが必要です。 (クロムではデータ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(hidden、display:none)を作成し、 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を介してこの答えを見つけました...) –

    関連する問題