Google Appscript Web 应用程序从 Chrome 扩展程序接收消息

Google Appscript Web App receiving message from Chrome Extension

我正在 App Script 上开发网络应用程序(使用 Google API)。我有一个 chrome 扩展与网络应用一起工作,这样我就可以发送有关浏览器的信息。

我使用的内容脚本会在 Web 应用程序加载后进行初始化。我只想通过内容脚本将消息从扩展程序发送到 Web 应用程序。但是,DOM 不起作用,因为 App 脚本使用 iFrame。这是我实际网络应用程序中的代码:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <input type="text" id="pageId" onchange="updateSessionInfo()">
  </body>
  <script>
    function updateSessionInfo(){
      var pageId = document.getElementById("pageId").value;
      google.script.run.update(pageId);
    }
  </script>
</html>

我尝试使用 DOM 将 pageId 发送到输入元素,通过更改值,更新函数将发送信息。

但是,这是我在浏览器上收到的结构:

Chrome 开发工具

我的想法正确吗?还是编辑 DOM 既脏又不可行?还有别的办法吗?

更新:

我通过深入查看树找到了实际的文档 HTML 元素:

新控制台

但是如果 id="pageId" 的元素在下面,为什么我调用它时 return 为 null?

更新:

我注意到它有时 return 为空,有时在检测到元素的位置:

最新控制台

这对我来说是一个对话框:

通常我希望,如果这将 运行 作为一个对话框,它也会 运行 作为一个 webapp 添加一个 doget();

gs:

function runmydialog() {
  const ui = SpreadsheetApp.getUi();
  ui.showModelessDialog(HtmlService.createHtmlOutputFromFile('ah2'),'test');
}

function update(msg) {
  SpreadsheetApp.getUi().alert(msg);
}

html:

<!DOCTYPE html>
<html>
 <head>
   <base target="_top">
</head>
<body>
  <body>
    <input type="text" id="pageId" onchange="updateSessionInfo()">
  <script>
    function updateSessionInfo(){
      var pageId = document.getElementById("pageId").value;
      google.script.run.update(pageId);
    }
  </script>
</body>
</html>

对话:

警报:

我注意到您的脚本不在正文中。我不知道这是否有所作为。