2016-03-21 4 views
2

Ich versuche, eine Chrome-Erweiterung zu portieren, die eine Datei programmatisch erstellt und über Firefox 45.0.1 auf eine Firefox-WebExtension herunterlädt.Wie programmiere ich eine Datei, die mit einer Firefox WebExtension erstellt wurde, programmgesteuert?

Dies ist der Javascript-Code:

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 

Alle Linien scheinen gut auszuführen, aber keine Datei heruntergeladen wird (Ich habe einen console.log() nach dem a.click()).

Ab sofort gibt es in Firefox WebExtensions keine chrome.downloads-API.

Gibt es eine Inkompatibilität mit Firefox im obigen Code? Gibt es eine andere Alternative zum programmgesteuerten Herunterladen einer Datei mithilfe einer Firefox WebExtension?

+0

Firefox hat eine 'chrome.downloads'-API, aber leider wird das Herunterladen von' blob: '-URLs aufgrund dieses Fehlers nicht unterstützt: https://bugzil.la/1287347 –

Antwort

0

Eine Möglichkeit, dies zu tun, wäre, dem a-Tag einen Ereignis-Listener hinzuzufügen.

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; 
    } 
} 

Beachten Sie, dass ich die downloadVidWithChromeApi Funktion wie so, zu überprüfen, ob chrome.downloads unterstützt wird.

Daher kann dieser Code sowohl in Firefox, Chrome, und Opera Web Extensions als IS laufen.

+0

Dieser Code scheint nicht zu starten automatisch herunterladen. Ich habe es auch mit 'a.click()' nach der 'a.addEventListener ('click', dlLinkClicked); 'Zeile versucht. Ich verwende Firefox 45.0.1 unter Windows (neueste Version für normale Benutzer). Ist das derselbe Firefox, den Sie verwenden? – Pep

+0

Oder gibt es eine Erlaubnis, die ich in meinem manifest.json vermisse, um den Download zu bekommen? Für meine Firefox WebExtension habe ich nur 'Tabs'-Berechtigungen, die sowieso nichts mit diesem Code zu tun haben. Soweit ich weiß, wird die "chrome.downloads" API nicht in Firefox bis Firefox 47 sein, also glaube ich nicht, dass die 'Download'-Berechtigung in Firefox 45 verfügbar sein wird. – Pep

+0

Das sind meine Berechtigungen' "Berechtigungen": [ \t \t "Tabs", \t \t "*: // */*", \t \t "Downloads" \t] 'Vielleicht, wenn Sie die' downloads' Berechtigung hinzufügen können Sie auf 'a.click(); 'um es auszulösen? – SudoPlz

Verwandte Themen