[更新]:我可以使用 Chrome 浏览器扩展中的应用程序脚本从打开的 Google 文档获取光标位置吗?

问题描述 投票:0回答:1

我创建了一个应用程序脚本来从打开的 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)
});
google-apps-script google-chrome-extension google-docs
1个回答
0
投票

当使用 API 运行脚本时,不可能使用 Google Apps 脚本(特别是文档服务(DocumentsApp 类))来获取光标位置。

上述情况是因为某些文档服务方法依赖于从 UI 运行函数时 Google Docs Web 应用程序内部发送的数据,或者从 UI(扩展 > Apps 脚本)打开脚本编辑器时依赖于 Google Docs Web 应用程序内部发送的数据。

解决方法是使用网络抓取

相关

© www.soinside.com 2019 - 2024. All rights reserved.