fix filedownload with chrome/edge+selfsignedcerts #7553

Signed-off-by: si458 <simonsmith5521@gmail.com>

si458 committed Jan 16, 2026 at 11:40 UTC 977cb350bc2205aaa86fb775741fbf54a9c7f637
4 files changed +16 -30
views/agentinvite.handlebars
+4 -7
@@ -515,14 +515,11 @@
515 function escapeHtmlBreaks(string) { return String(string).replace(/[&<>"'`=\/]/g, function (s) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;', '/': '&#x2F;', '`': '&#x60;', '=': '&#x3D;', '\r': '<br />', '\n': '' }[s]; }); };
516 function addHtmlValue(t, v) { return '<table><td style=width:120px>' + t + '<td><b>' + v + '</b></table>'; }
517 function downloadFile(link, name, closeDialog) {
518 - var element = document.createElement('a');
519 - element.setAttribute('href', link);
520 - element.setAttribute('rel', 'noreferrer noopener');
521 - element.setAttribute('target', 'fileDownloadFrame');
522 - element.setAttribute('download', decodeURIComponent(name?name:''));
518 + var element = document.createElement('iframe');
519 + element.style.cssText = 'display:none;width:0;height:0;border:0;visibility:hidden;';
520 + element.src = link;
521 document.body.appendChild(element);
524 - element.click();
525 - document.body.removeChild(element);
522 + setTimeout(function() { try { if (element.parentNode) { document.body.removeChild(element); } } catch(e) { } }, 10000);
523 if (closeDialog) { setDialogMode(0); }
524 }
525 function copyAgentUrl(url,addflag) {
views/default.handlebars
+4 -7
@@ -19474,14 +19474,11 @@
19474 function isMacNode(node) { if ((node.mtype != 2) || (node.agent == null) || (node.agent.id == null)) return false; return ([11,16,29].indexOf(node.agent.id) >= 0); }
19475
19476 function downloadFile(link, name, closeDialog) {
19477 - var element = document.createElement('a');
19478 - element.setAttribute('href', link);
19479 - element.setAttribute('rel', 'noreferrer noopener');
19480 - element.setAttribute('target', 'fileDownloadFrame');
19481 - element.setAttribute('download', decodeURIComponent(name?name:''));
19477 + var element = document.createElement('iframe');
19478 + element.style.cssText = 'display:none;width:0;height:0;border:0;visibility:hidden;';
19479 + element.src = link;
19480 document.body.appendChild(element);
19483 - element.click();
19484 - document.body.removeChild(element);
19481 + setTimeout(function() { try { if (element.parentNode) { document.body.removeChild(element); } } catch(e) { } }, 10000);
19482 if (closeDialog) { setDialogMode(0); }
19483 }
19484
views/default3.handlebars
+4 -7
@@ -21184,14 +21184,11 @@
21184 function isWindowsNode(node) { if ((node.mtype != 2) || (node.agent == null) || (node.agent.id == null)) return false; return ([1, 2, 3, 4, 21, 22, 34, 42, 43].indexOf(node.agent.id) >= 0); }
21185
21186 function downloadFile(link, name, closeDialog) {
21187 - var element = document.createElement('a');
21188 - element.setAttribute('href', link);
21189 - element.setAttribute('rel', 'noreferrer noopener');
21190 - element.setAttribute('target', 'fileDownloadFrame');
21191 - element.setAttribute('download', decodeURIComponent(name ? name : ''));
21187 + var element = document.createElement('iframe');
21188 + element.style.cssText = 'display:none;width:0;height:0;border:0;visibility:hidden;';
21189 + element.src = link;
21190 document.body.appendChild(element);
21193 - element.click();
21194 - document.body.removeChild(element);
21191 + setTimeout(function() { try { if (element.parentNode) { document.body.removeChild(element); } } catch(e) { } }, 10000);
21192 if (closeDialog) { setDialogMode(0); }
21193 }
21194
views/sharing.handlebars
+4 -9
@@ -2350,17 +2350,12 @@
2350 function focusTextBox(x) { setTimeout(function () { Q(x).selectionStart = Q(x).selectionEnd = 65535; Q(x).focus(); }, 0); }
2351 var isFilenameValid = (function () { var x1 = /^[^\\/:\*\?"<>\|]+$/, x2 = /^\./, x3 = /^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i; return function isFilenameValid(fname) { return x1.test(fname) && !x2.test(fname) && !x3.test(fname) && (fname[0] != '.'); } })();
2352
2353 - // Webkit seems to have a problem with "download" tag causing "network error", but openning the download in a hidden frame fixes it.
2354 - // So we do that for all browsers except FireFox
2353 function downloadFile(link, name, closeDialog) {
2356 - var element = document.createElement('a');
2357 - element.setAttribute('href', link);
2358 - element.setAttribute('rel', 'noreferrer noopener');
2359 - element.setAttribute('target', 'fileDownloadFrame');
2360 - if (navigator.userAgent.indexOf('Firefox') >= 0) { element.setAttribute('download', decodeURIComponent(name ? name : '')); }
2354 + var element = document.createElement('iframe');
2355 + element.style.cssText = 'display:none;width:0;height:0;border:0;visibility:hidden;';
2356 + element.src = link;
2357 document.body.appendChild(element);
2362 - element.click();
2363 - document.body.removeChild(element);
2358 + setTimeout(function() { try { if (element.parentNode) { document.body.removeChild(element); } } catch(e) { } }, 10000);
2359 if (closeDialog) { setDialogMode(0); }
2360 }
2361