chrome扩展:无法使用变量修改活动页面的dom仅使用静态字符串

gzszwxb4  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(238)

干杯
我目前正在开发一个chrome扩展,旨在自动化我日常工作的一部分,并改进流程的工作流程。
作为初始poc,我试图用扩展弹出窗口中文本区域的输入替换活动选项卡的整个dom。
显然,当我用一个变量覆盖主体的html时,它不起作用,然而,使用硬编码字符串它起作用。
这是密码 popup.js :

var data_from_input = 'default value'
  submitButton.addEventListener("click", async () => {
    data_from_input = document.getElementsByName('input')[0].value;

    let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      function: destroyDOM,
    });
  });

  function destroyDOM() {
    document.body.innerHTML = "test"; // works
    document.body.innerHTML = data_from_input; // doesn't work. Page content is "test" no matter what's in the variable
  }

这就是为什么 popup.html 看起来像:popup.html图像

预期行为:

页面内容应替换为输入值。

实际行为:

按下按钮后,页面内容为“测试”,而不是输入值,无论输入是什么。

我尝试过的事情:

在调试中,我看到了这一点 data_from_input 从输入中提取正确的值。但是,在 destroyDOM 函数不工作,因为断点由于某种原因未被触发,即使文本更改为“test”表示此函数实际运行。
如果我删除了将内容更改为“test”的行,那么按下按钮时将不会发生任何事情。
将硬编码值设置为 data_from_input (代码中的第一行)并通过删除第3行来避免重写它也不起作用-仍然得到“test”。
为什么它只适用于硬编码字符串而不适用于变量?
你知道是什么导致了这个问题吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题