【问题标题】:chrome extension manifest v3, accessing window variable [duplicate]chrome扩展清单v3,访问窗口变量[重复]
【发布时间】:2021-07-30 04:12:38
【问题描述】:

如何通过 Manifest v3 访问页面的窗口变量。

在 V2 中,我可以让内容脚本通过将 javascript 注入主页面来访问页面的窗口变量。但是,javascript 代码的 appendChild() 不适用于 V3。

我尝试使用 scripting.executeScript 但这仍然无法访问 window 变量(DOM 是可访问的)。

例如,下面的代码应该在 frameid 0 上注入,但顶部 javascript 上下文的窗口仍然不可读:

chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      // since only one tab should be active and in the current window at once
      // the return variable should only have one entry
      const activeTab = tabs[0];
      const activeTabId = activeTab.id; // or do whatever you need

      chrome.scripting.executeScript({
        target: { tabId: activeTabId, frameIds: [0] },
        files: [filePath],
      });
    });

【问题讨论】:

  • 为您的 DOM script 元素的 src 使用单独的 js 文件,而不是 textContent。并通过 web_accessible_resources 公开该文件。

标签: google-chrome-extension chrome-extension-manifest-v3


【解决方案1】:

也许我不太了解你的问题,但是:

1.如果您要访问的页面是页面扩展,则无需注入任何内容脚本即可检索任何变量。

2.如果您想获取您在标签中创建\设置的内容脚本变量,您必须向该标签中的内容脚本发送一条消息,要求在该消息中返回其值.

3.如果您想获取主页的变量(从您可能的内容脚本中),由于孤立的世界规则,您没有任何希望。

【讨论】:

  • 它是option3,它在V2下工作。您可以在主页上附加任何脚本(例如,head)。然后该脚本可以访问主页上的所有变量,您甚至可以通过在 DOM 上打印结果或使用 postmessage 来检索数据。它是在 V3 下不像以前那样工作的注入。
  • 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self'”。有了 MV3 就没有希望了
  • 我不明白的是有很多扩展依赖于访问主页的 javascript。看来 V3 会破坏很多扩展。为什么 Chrome 会采用这种方式是没有意义的,尤其是因为注入的大部分代码都可以通过查看源代码来验证。
  • 使用 scripting.executeScript 注入脚本,您可以访问窗口“默认”属性和函数,但不能访问用户定义的对象和全局变量。我不是制定规则的人,对不起
  • #3 错误:扩展可以访问页面的变量,见Use a content script to access the page context variables and functions
猜你喜欢
  • 2014-06-03
  • 2015-12-15
  • 1970-01-01
  • 2021-03-26
  • 2021-09-21
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多