问题描述
因此,我对此进行了数小时的搜索,但在浏览器中找不到任何适用于当前 Google Sheets API (v4) 的内容。我可以 100% 通过 Postman 甚至浏览器地址栏获取数据。我有一个公开的 Google 电子表格。我有一个 API 密钥。我可以成功返回所有行数据。
一旦我尝试在浏览器扩展程序中这样做,我什么也得不到。
是否有人知道如何配置 JavaScript fetch() 调用以在公共 Google 电子表格上成功返回?不编辑,不删除。只是一个 GET。
这是我正在尝试但不起作用的方法:
var url = `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${sheetId}?key=${key}`
var response = await fetch(url,{
method: "GET",mode: "no-cors",headers: {
"Host": "sheets.googleapis.com"
}
});
我注意到两件事:
- 如果
mode
中的no-cors
未设置为fetch()
,我会收到 NetworkError - 在 Postman 中,如果没有
Host
标头,我会收到错误响应
解决方法
请记住,这是一个与编写浏览器扩展/插件相关的问题,而不仅仅是浏览器中典型的 fetch()
用法。
要解决此问题,我必须在 manifest.json
文件中添加主机权限,以允许我调用的 Google API sheets.googleapis.com
的 URL,如下所示:
{
"manifest_version": 2,"name": "Browser Extension","description": "description","version": "1.0.0","icons": {
"64": "icons/icon.png"
},"background": {
"scripts": [
"background_script.js"
]
},"permissions": [
"*://sheets.googleapis.com/*"
],"content_scripts": [
[...]
就 fetch 调用而言,我只需要 URL。无需设置任何选项。