Проблема связана с обработчиком onclick для тега привязки:
<a href="#" onclick="download()">Download Image</a>
в предоставленном вами JS, download
не является функцией, это переменная ссылка на элемент DOM.
Вы также не должны добавлять новый dataURL в привязку по щелчку - вы должны извлечь dataURL из холста и установить атрибут href при загрузке или при изменении приложения, когда dataURL необходимо обновить. получение dataURL холста и установка href для события onclick
приведут к запуску начального href (#
), а не к новому dataURL. Вам также необходимо установить привязку, чтобы иметь атрибут download
, чтобы сигнализировать о том, что он предназначен для загрузки, а не для запроса в качестве отдельного ресурса.
Это должно быть все, что вам нужно:
HTML:
<div id="saveButton"">
<a href="#" id="download-anchor" download>Download Image</a>
</div>
JS:
const downloadEl = document.getElementById('download-anchor');
const canvasData = document.getElementById("canvas").toDataURL("image/png").replace("image/png", "image/octet-stream");
downloadEl.setAttribute('href', canvasData);