W nowszych przeglądarek, może być w stanie używać plamy:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button onclick="tryit();">PDF</button>
<script>
function tryit() {
var win = window.open('_blank');
downloadFile('/pdf', function(blob) {
var url = URL.createObjectURL(blob);
win.location = url;
});
}
function downloadFile(url, success) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
xhr.responseType = "blob";
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (success) success(xhr.response);
}
};
xhr.send(null);
}
</script>
</body>
</html>
w IE, poprosić użytkownika:
window.navigator.msSaveOrOpenBlob(blob, 'readme.pdf');
PS: można przetestować backend w węźle:
router.get('/pdf', function(req, res) {
if(req.headers.authorization !== 'Basic dXNlcm5hbWU6cGFzc3dvcmQ=') return res.status(403).send('Not allowed');
res.sendFile(path.join(__dirname, 'public', 'render.pdf'));
});
router.get('/', function(req, res) {
res.render('index');
});
Wygląda na to, że zadziała. wypróbowane? – IsmailS
Tak, z Chrome 48 -> Węzeł 0.12 Oznacz to? :) – malix
obsługiwane przez główne najnowsze przeglądarki. Ale wciąż w toku. https: //developer.mozilla.org/pl/docs/Web/API/URL/createObjectURL # Kompatybilność przeglądarki – IsmailS