Как разрешить загрузки внутри веб-просмотра в приложении Google Chrome?

У меня есть веб-приложение, работающее на локальном веб-сервере, с которым я пытаюсь взаимодействовать через веб-просмотр. У меня есть ссылка, которая будет возвращать PDF, где расположение содержимого является вложением (это требование, чтобы файл был загружен и открыт программой чтения PDF-файлов по умолчанию).

Я посмотрел, что я могу найти, имея дело с запросами на разрешение в приложениях Chrome. На данный момент я даже не могу получить подтверждение того, что приложение даже получает запрос на разрешение. Я делаю что-то неправильно? Наверное. Что это?

Вот ссылка из моего веб-приложения.

<a href="/mypage/publication_file/8827">Download</a>

Вот мой манифест.

{
  "app": {
    "background": {
      "scripts": [ "main.js" ]
     }
   },
  "icons": {
   "128": "icon_128.png",
   "16": "icon_16.png"
  },
  "manifest_version": 2,
  "minimum_chrome_version": "30",
  "name": "PED",
  "permissions": [ "webview" ],
  "version": "0.0.0"
}

Вот мой JS.

chrome.app.runtime.onLaunched.addListener(function() {
  runApp();
});

function runApp() {
  chrome.app.window.create('browser.html', {
    bounds: {
     'width': 1280,
     'height': 768
    }
  });
}

var webview = document.getElementById("webview");
webview.addEventListener('permissionrequest', function(e) {
  console.log("permission requested")
});

Когда я нажимаю на ссылку, я не получаю сообщение на консоли.

1 ответ

var webview = null;

function isSafeUrl(url) {
  // You may want to perform a more rigorous check.
  // There's a technique that creates an <a> to parse the URI, but that seems
  // like a security risk.
  return !!url.match(/^(?:ftp|https?):\/\//i);
}

function onPermissionRequest(event) {
  switch (event.permission) {
    case 'download':
      if (isSafeUrl(event.request.url)) {
        event.request.allow();
      } else {
        event.request.deny();
      }
      break;

    // You can add code for other permissions here.
  }
}

function onDomReady() {
  webview = document.getElementById('webview');
  webview.addEventListener('permissionrequest', onPermissionRequest);
}

document.addEventListener('DOMContentLoaded', onDomReady);
Другие вопросы по тегам