Google chrome extension chrome扩展清单v3,访问窗口变量

Google chrome extension chrome扩展清单v3,访问窗口变量,google-chrome-extension,chrome-extension-manifest-v3,Google Chrome Extension,Chrome Extension Manifest V3,如何通过manifestv3访问页面的窗口变量 在V2中,我可以让内容脚本通过将javascript注入主页来访问页面的窗口变量。但是,javascript代码的appendChild()在V3上不起作用 我尝试使用scripting.executeScript,但这仍然无法访问窗口变量(DOM是可访问的) 例如,假设以下代码注入frameid 0,但顶层javascript上下文的窗口仍然不可读: chrome.tabs.query({ active: true, currentWindow:

如何通过manifestv3访问页面的窗口变量

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

我尝试使用scripting.executeScript,但这仍然无法访问窗口变量(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],
      });
    });

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

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

2。如果要获取在选项卡中创建\设置的内容脚本变量,必须向该选项卡中的内容脚本发送一条消息,要求返回该消息中的值


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

这是选项3,它在V2下工作。您可以在主页上添加任何脚本(例如,head)。然后,该脚本可以访问主页上的所有变量,甚至可以通过在DOM上打印结果或使用postmessage检索数据。注入在V3下无法正常工作。拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src‘self’”。使用MV3没有希望我不理解的是有很多扩展依赖于访问主页的javascript。似乎V3将破坏许多扩展。Chrome为什么会这样做毫无意义,特别是因为注入的大部分代码都可以通过查看源代码进行验证。使用脚本注入脚本。executeScript可以访问窗口“默认”属性和函数,但不能访问用户定义的对象和全局变量。我不是制定规则的人,很抱歉#3是错误的:扩展可以访问页面的变量,请参见为DOM
脚本
元素的
src
使用单独的js文件,而不是
textContent
。并通过可访问的web资源公开该文件。