我创建了一个应用程序脚本来从打开的 Google 文档文件中获取光标位置。我使用应用程序脚本作为 Web Url,并使用 fetch 方法在 Chrome 浏览器扩展中调用它。虽然我能够从 Google 文档获取数据,但无法获取光标位置。每次我从浏览器扩展触发应用程序脚本功能时,我都会得到 null。
我正在粘贴我想要做的示例代码。 https://codepen.io/Ronak-Bhandari/pen/WNqObpP 我们可以用这种方法获取光标位置吗?
如果不是上述方法,还有其他方法可以从 Chrome 浏览器扩展程序中获取光标位置吗?
// App Script Code
function doPost(e) {
const doc = DocumentApp.openById(JSON.parse(e.postData.contents).documentId);
var cursor = doc.getCursor();
Logger.log( cursor);
if (cursor) {
var position = cursor.getSurroundingTextOffset();
return ContentService.createTextOutput(JSON.stringify({ position: position }))
.setMimeType(ContentService.MimeType.JSON);
} else {
var selection = doc.getSelection();
Logger.log('selection',selection);
if (selection) {
var elements = selection.getRangeElements();
if (elements.length > 0) {
var element = elements[0];
var position = element.getStartOffset();
return ContentService.createTextOutput(JSON.stringify({ position: position }))
.setMimeType(ContentService.MimeType.JSON);
}
}
return ContentService.createTextOutput(JSON.stringify({ position: -1 }))
.setMimeType(ContentService.MimeType.JSON);
}
}
// Code in the service worker in chrome browser extension
const url = 'WEB_APP_URL_DEPLOYED_FROM_APP_SCRIPT';
fetch(url, {
method: 'POST',
body: JSON.stringify({
documentId: message.documentId,
}),
}).then((res) => res.json()).then((data) => {
console.log(data);
}).catch((err) => {
console.log(err)
});
当使用 API 运行脚本时,不可能使用 Google Apps 脚本(特别是文档服务(DocumentsApp 类))来获取光标位置。
上述情况是因为某些文档服务方法依赖于从 UI 运行函数时 Google Docs Web 应用程序内部发送的数据,或者从 UI(扩展 > Apps 脚本)打开脚本编辑器时依赖于 Google Docs Web 应用程序内部发送的数据。
解决方法是使用网络抓取。
相关