Я разрабатываю расширение Chrome, в котором я создаю файл CSV, и при нажатии кнопки я хочу сохранить этот файл CSV на диске пользователя.
Сначала я попытался добавить кнопку / виджет «Сохранить на диск» (https://developers.google.com/drive/api/v3/savetodrive) в свой HTML, однако я обнаружил, что это не будет работать в моем CSV-файле. не сохраняется локально, а генерируется из текстового содержимого с использованием: blob = new Blob([csv], {type: "text/csv"}); href = window.URL.createObjectURL(blob);
, где csv
- это строка, хранящая данные в формате CSV. В результате этого переменная href
является не URL-адресом, а URI большого двоичного объекта, который не поддерживается в качестве атрибута data-src
при использовании кнопки «Сохранить на диск» (из документации: «URI данных и file://
URL не поддерживаются ")
Второй подход заключается в использовании API Google Диска, однако я не нашел хороших примеров того, как использовать этот API только в чисто интерфейсных приложениях без серверной части. Большинство примеров из документации находятся в Python или node. Единственный пример на основе браузера в документации (https://developers.google.com/drive/api/v3/quickstart/js) требует запуска сервера localhost, что невозможно в расширении Chrome. Попытка использовать этот пример из документации без запуска сервера localhost приводит к следующей ошибке: Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('file://') does not match the recipient window's origin ('null').
Я знаю, что конечная точка загрузки Drive API поддерживает CORS, поэтому я не знаю, зачем мне нужен localhost для выполнения запросов к Drive API или для использования gapi.client
из https://apis.google.com/js/api.js
. Таким образом, я не считаю, что то, что я ищу, слишком сложно; сохранить CSV-файл на Google Диске без использования внутреннего сервера. Кажется, что это возможно, но я не встречал никаких примеров или документации о том, как добиться этого в чисто интерфейсных приложениях.
function saveToDrive() { // Function that is called when the button is clicked.
csv = document.getElementById("userInput").value // User inputs CSV formatted data, this data is captured and stored in a string
blob = new Blob([csv], {type: "text/csv"});
href = window.URL.createObjectURL(blob);
// Code to upload this file to the logged in user's Google Drive (what I need)
}