Chrome-Paketanwendung - Herunterladen von Dateien aus Webview

Ich arbeite daran, eine vorhandene Webanwendung im Ajax-Stil als Chrome-App-Paket bereitzustellen. Die Ajax-App wird in einer Webansicht innerhalb der gepackten App ausgeführt und funktioniert größtenteils einwandfrei.

Mit der Ajax-App können Benutzer Dokumente mithilfe von Standard-HTML 5-Upload und Drag & Drop hochladen. Uploads funktionieren aber einwandfreiDownloads funktionieren nicht.

Dies ist ein vereinfachtes Beispiel für die Logik in der Ajax-App. Es verwendet Javascript, um das Click-Ereignis zu verarbeiten, führt eine Logik aus und löst schließlich den Download aus, indem der Speicherort eines versteckten IFrames festgelegt wird.

<html>
<head>
  <script type="text/javascript">
  function downloadFile(url) {
    window.frames['dataTransfer'].location = url;
  }
  </script>
</head>
<body>
  <a href="http://www.google.com" target="_blank">Google</a><br/>
  <a href="https://s3.amazonaws.com/LYHKDevA1/2058e6cab4304af3a39eeb275eeac96d?response-content-disposition=attachment%3Bfilename%3D%22TestFile.pdf%22%3Bfilename*%3DUTF-8%27%27TestFile.pdf&Signature=FUlZZqNoJ%2F%2FvHIPX6CPDkvJ7uik%3D&Expires=1437854276&AWSAccessKeyId=1ZAN0NYFJ2DCQX8AN8G2" target="_blank">Download PDF</a><br/>
  <a href="#" onclick="downloadFile('https://s3.amazonaws.com/LYHKDevA1/2058e6cab4304af3a39eeb275eeac96d?response-content-disposition=attachment%3Bfilename%3D%22TestFile.pdf%22%3Bfilename*%3DUTF-8%27%27TestFile.pdf&Signature=FUlZZqNoJ%2F%2FvHIPX6CPDkvJ7uik%3D&Expires=1437854276&AWSAccessKeyId=1ZAN0NYFJ2DCQX8AN8G2');return false;" target="_blank">Download PDF JS</a><br/>
  <iframe name="dataTransfer" style="width: 0; height: 0; border: none;"></iframe><br/>
</body>
</html>

Wenn Sie dies in einem Standard-Chrome-Tab ausführen, funktionieren alle drei Links einwandfrei. In einer Chrome-App funktionieren jedoch nur die ersten beiden Links. Wenn Sie auf den dritten Link klicken, geschieht nichts. Im Netzwerkbereich der Developer Tools scheint der Download tatsächlich zu starten, wird dann aber schnell abgebrochen.

Das Manifest der Chrome-App ermöglicht Webview und die damit verbundenen relevanten Domains.

{
  "manifest_version": 2,
  "name": "Test Download",
  "version": "0.1.0",
  "permissions": [
    "webview",
    "<DOMAIN OF THE SAMPLE PAGE ABOVE>",
    "https://s3.amazonaws.com/"
  ],
  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },
  "icons": {},
  "minimum_chrome_version": "28"
}

Die Chrome App hat einige einfachenewwindow Handhabung auch drin.

window.onload = function() {
  var webview = document.querySelector('#app-webview');
  webview.src = '<URL TO SAMPLE PAGE ABOVE>';
  webview.addEventListener('newwindow', function(e) {
    e.preventDefault();
    e.stopPropagation();
    window.open(e.targetUrl);
  });
};

Irgendwelche Vorschläge, wie man Downloads zum Laufen bringt (hoffentlich ohne wesentliche Änderungen an der Ajax-App)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage