Как разрешить загрузки внутри веб-просмотра в приложении 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);