5

Verilerinizin bir yedek dosyasını indirmenize izin veren bir Google Chrome uzantısı yazıyorum. Kullanıcının bir düğmeye basmasını ve "Farklı kaydet" iletişim kutusunun açılmasını ve dosyayı kendi bilgisayarına kaydedebilmesini istiyorum. Hiçbir şey işe yaramadı ve internette bir cevap bulamadım. Bu komut IE içindir ve veri URI'lerini kullanma Webkit alternatif Google Chrome'da güç indirme Uzantı

  • orada görünmüyor çünkü çalışmıyor document.execCommand('SaveAs', null, 'filename.json'); Bu kullanma

    1. : Birkaç yaklaşımlar çalıştılar. Bu en umut verici ve Opera ve Firefox'ta çalıştı, fakat sorun ne Chrome ne de Safari'nin URI'daki Content-disposition = attachment -header'ı desteklemediği. Bu , çalışmalıdır. (Chrome bana ctrl/cmd+s veri URI'sinden bir sayfaya izin vermiyor)
    2. XMLHTTPRequest'u kullanarak. Bunu denemedim, ama bu isteği etrafa iletebilmen için bir yolu olmalı mı? Harici bir sunucu kullanmak istemediğimi lütfen unutmayın (bu durumda bir POST isteğini gönderebilir ve bir Content-disposition: -header uygulayabilirdim)
    3. Kullanılabilir bir Chrome Extension API'sini kullanma. Fakat bu amaç için hiçbir şey yok gibi görünüyor.

    Herhangi bir harici sunucu kullanmak istemememin nedeni, barındırma için ödeme yapmak istemem ve gönderilen veriler kullanıcıya duyarlı olabilir ve istemiyorum. kimsenin mahremiyetini ihlal et.

    Bunu işe almak isteyen var mı?

  • +2

    Herhalde körüm http://stackoverflow.com/questions/4003352/chrome-extension-download-export-content-created-on-the-fly – serg

    cevap

    3

    Bunu Github'daki Appmator kodunda yaptım.

    Temel yaklaşım, Blob'unuzu oluşturmaktır, ancak istediğinizde (Chrome/WebKit/Firefox XmlHttpRequest'te bir yanıtBlob'u kullanabilir, böylece bunu kullanabilirsiniz), bir iframe oluşturun (gizli, göster: yok) ve sonra da iframe Blob olmak.

    Bu, bir indirme işlemini başlatacak ve dosya sistemine kaydedecektir. Tek sorun, henüz dosya adını ayarlayamazsın.

    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

    görüyorum ama tam olarak nerede damla oluşturma tam olarak senin kodunda URL’yi nereye koyabilirim (veya xmlhttprequest)? –

    +0

    Bu kod aslında güncel değil, ama BlobBuilder ve bb.append() – Kinlan

    +0

    ile oldu ... nasıl "tarih dışı" kodu ile yapmak için? (Bu cevabı google yoluyla buldum ...) –