很长。关闭。试图解释。有我尝试过的东西。我把它们都删除了,只留下原来的核心问题。
我正在尝试使用 V3 进行扩展。我想用它更新我的驱动器中的一些文件。我得到了客户端 ID、API 密钥、客户端密码。
感谢您的帮助。
其实很简单。
设置云控制台并获取 Chome 应用程序的 OAuth 客户端 ID(谷歌不会告诉你这个。所以你去寻找网络应用程序并卡在那里)。添加 oauth2 密钥,添加您的客户端 ID 和您的范围(在本例中为
https://www.googleapis.com/auth/drive.file
)作为密钥,还在您的 manifest.json 文件中添加 identity
权限。
然后在你的 service worker 里面写这个。它可能有一些不相关/不必要的代码。我真的不知道它是如何工作的。
这可能有一些不足,但这是基本的想法。
const fileUpdate = async () => {
chrome.identity.getAuthToken({
interactive: true,
},
async (token) => {
await fetch(`https://www.googleapis.com/upload/drive/v3/files/${USER_FILE_ID}`, {
method: 'PATCH',
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json",
"Content-Type": "application/json"
},
body: text
})
.then((response) => {
return response.json();
})
.then((data) => {
console.log(`fileUpdate result: ${data}`);
})
.then((error) => {
console.log(`fileUpdate errors: ${error}`);
});
});
}
谷歌说它需要授权然后把你送到那里。就是这样。谷歌把你留在那里。我在那里看不到任何有用的东西。
如果您在 JavaScript 中搜索 Google Drive API,您可以找到此页面。它需要 HTML 文件并使用此禁止行
<script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>
您不能在扩展程序中这样做。不允许。 scripting.executeScript()
之类的替代方法也行不通。至少我不能让它工作。
如果你搜索得足够多,你可以找到this。当您查看左侧菜单时,它会提示您应该使用 JavaScript Web Apps,因为它是 JavaScript。但是你不能,因为当你想要一个令牌时,它会将你重定向到登录页面。而且是你的service worker,不能去那里
如果您尝试在登录过程后更有意义的服务器端,但它有点相同。 Node.js 也不会工作,它在扩展中是不允许的。看起来你可以变通,但必须有其他方法。
很容易被别人的回答误导。喜欢我提到的页面并喜欢这里的答案或喜欢其他人提到的 CORB/CORS 错误。
实际上 Google Apps Script 是一种聪明的方式,但它必须有一个体面的方式。