2016-03-21 21 views
2

Firefox 45.0.1'i kullanarak bir programın Firefox WebExtension'a programsal olarak oluşturup indiren bir Chrome Uzantısı'nı yüklemeye çalışıyorum.Dosyada oluşturulan bir dosyayı Firefox WebExtension ile nasıl programlayabilirim?

Bu JavaScript kodudur:

text = '{"greeting":"Hello, World!"}'; 
    var a = document.createElement('a'); 
    var file = new Blob([text], {type: 'text/json'}); 
    a.href = URL.createObjectURL(file); 
    a.download = 'hello.world'; // Filename 
    a.click();     // Trigger download 

Tüm hatlar ince yürütmek gibi görünüyor, ama hiçbir dosya indirilir (I a.click() sonra console.log() koymak).

Şu andan itibaren Firefox WebExtensions içinde chrome.downloads API'si bulunmamaktadır.

Yukarıdaki kodda Firefox ile herhangi bir uyumsuzluk var mı? Firefox WebExtension kullanarak bir dosyayı programlı olarak indirmek için başka bir alternatif var mı?

+0

Firefox'un bir chrome.downloads' API'sı var, ancak ne yazık ki bu blogun indirilmesi blob: '-URL'leri desteklemiyor: https://bugzil.la/1287347 –

cevap

0

Bunu yapmanın bir yolu, bir etikete olay dinleyicisi eklemek olabilir. Ben chrome.downloads desteklenip desteklenmediğini kontrol etmek, şöyle downloadVidWithChromeApi işlevini kullanın

text = '{"greeting":"Hello, World!"}'; 
var a = document.createElement('a'); 
var file = new Blob([text], {type: 'text/json'}); 
a.href = URL.createObjectURL(file); 
a.download = 'hello.world'; // Filename 
a.addEventListener('click', dlLinkClicked); 


function dlLinkClicked(e){ 
    var link = e.currentTarget.href; 
    var filename = e.currentTarget.download; 

    /*downloadVidWithChromeApi downloads using the chrome download API, 
    otherwise returns false and starts downloading the file 
    using the html5 download - you don't have to do anything else*/ 

    if(downloadVidWithChromeApi(link, filename)){ 
     e.preventDefault(); 
    } 
} 

function downloadVidWithChromeApi(link, fileName){ 
    if(chrome.downloads && chrome.downloads.download){ 
     chrome.downloads.download({ 
      url: link, 
      saveAs: false, 
      filename: fileName // Optional 
     }); 
     return true; 
    }else{ 
     return false; 
    } 
} 

dikkat edin. Bu nedenle, bu kod hem firefox, hem de krom ve AND opera web uzantıları AS IS'de çalışabilir.

+0

Bu kod tetiklenmiyor. otomatik olarak indir. Ayrıca a.addEventListener ('click', dlLinkClicked); 'satırından sonra a.click() ile denedim. Windows'ta Firefox 45.0.1 kullanıyorum (düzenli kullanıcılar için en son sürüm). Bu, kullandığınız Firefox mu? – Pep

+0

Veya, indirme almak için benim manifest.json içinde eksik bir izin var mı? Firefox WebExtension için, sadece bu kodla ilgisi olmayan sekmeler izni var. Bildiğim kadarıyla, 'chrome.downloads' API'sı Firefox 47'ye kadar Firefox'ta olmayacak, bu yüzden 'download' izninin Firefox 45'de kullanılabileceğini düşünmüyorum. – Pep

+0

Bunlar benim izinlerim "izinler": [ \t \t "sekmeleri", \t \t "*: // */*", \t \t "indirmeleri" Eğer 'downloads' iznini ekleyin Belki eğer \t],' sen yapabileceksiniz 'a.click(); 'tetiklemek için? – SudoPlz

İlgili konular