2016-03-29 4 views
1

Ich habe ein Hintergrundskript in meiner Chrome Extension, die eine Datei namens install.bat aus dem Extensions-Verzeichnis herunterlädt. Das funktioniert perfekt. Aber wenn ich anrufen will chrome.downloads.open(id); die folgende Fehlermeldung wird ausgelöst:Führen Sie die Datei nach chrome.downloads.download

Unchecked runtime.lastError while running downloads.open: User gesture required 

ich beiden Berechtigungen angefordert (["downloads", "downloads.open"]) in der manifest.json-Datei, die für dieses Verfahren erforderlich ist.

Gibt es eine Problemumgehung für dieses Problem oder sogar eine einfache Lösung?

+0

einen Blick auf http: // Stackoverflow .com/questions/26775564/how-to-öffnen-ein-heruntergeladene-Datei. Die Kommentare zu der Antwort scheinen das Problem zu erklären, das Sie haben. – dan

+0

@ dan75 Ich habe diese Frage und die Kommentare gesehen, aber sie bieten keine Lösung. [Ein Kommentar] (http://stackoverflow.com/questions/26775564/how-to-open-a-downloaded-file#comment42138751_26778655) dort sagt, dass Sie "einen kundenspezifischen Knopf darstellen können". Aber wie? Weil ein JavaScript confirm() -Dialog und 'chrome.downloads.acceptDanger' nicht funktionieren. – Datagrammar

+0

Ich denke, das ist ein bekanntes Problem [hier] (https://bugs.chromium.org/p/chromium/issues/detail?id=181124). * "Benutzer Gestenbehandlung zu Benachrichtigungen API hinzufügen. Dies behebt den Fehler, wo Benutzer Gesten wurden nicht berücksichtigt, nachdem Benutzer mit einer Benachrichtigung interagiert." * – abielita

Antwort

1

Also, nachdem ich die Diskussion @abielita in seinem Kommentar erwähnt habe, fand ich eine Lösung für mein Problem. Benachrichtigungen werden jetzt wieder als User gesture gezählt. Da es jedoch nicht möglich ist, Downloads automatisch zu öffnen, wenn die Berechtigung downloads.open im Manifest angefordert wird, ist diese Berechtigung nur nutzlos.

So, hier ist meine Lösung (mit Weiche sie ist nicht wirklich zufrieden mit, weil der Download nicht automatisch geöffnet wird), aber es funktioniert für mich:

var downloadID = 123; 

var nIcon = chrome.extension.getURL("icons/icon_48.png"); 
var nTitle = "My Extension - Client Installer"; 
var nMessage = "Please click the button below to run the installer."; 
var nButtons = [{ title: "Run the installer..." }]; 

var nOptions = { type: "basic", iconUrl: nIcon, priority: 2, title: nTitle, message: nMessage, buttons: nButtons }; 
chrome.notifications.create("hello_world", nOptions, function (nIDa) { 
    chrome.notifications.onButtonClicked.addListener(function (nIDb, nButtonIndex) { 
     if (nIDb === nIDa) { 
      chrome.downloads.open(downloadID); 
     } 
    }); 
});