如何从Chrome扩展程序访问所有窗口对象?

Sto*_*dow 5 javascript google-chrome google-chrome-extension

我正在开发一个用于工作的Chrome扩展程序,它需要做的一件事就是读取(仅读取,而不是修改)我们在向服务器发出异步请求后发送回网站的对象.基本上我需要读取window.<our object name>对象并获取其中的内容.

现在,我知道这是可能的,因为我在我写的Tampermonkey脚本中这样做了.我能够console.log(window.<our object name>)和它进来了.

Tampermonkey是一个Chrome扩展程序,所以它没有内在的原因可以访问某些内容而另一个扩展程序无法访问.

但是当我尝试从内容脚本和注入的代码访问这个对象时,我什么也得不到.当我window只得到对象时,它只是部分出现,好像扩展对它的某些部分是盲目的.但如果我在页面上的控制台中,并且我打电话window,我会得到一个完整的窗口对象.真气.

因此,如果内容脚本不起作用,并且注入的脚本不起作用,并且弹出脚本没有理由在这里有任何好处,那么如何做到这一点呢?

非常感谢!

更新:根据要求,这里是manifest.json(我拿了page_redder示例并解决了这个问题,以确保我没有犯任何奇怪的错误):

{
  "name": "Page Redder",
  "description": "Make the current page red",
  "version": "2.0",
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_title": "get my object"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ],
  "manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)

这是content.js:

var getWindow = window.setTimeout(function() { console.log("From content script: " + window.<OBJECT NAME>); }, 5000);
Run Code Online (Sandbox Code Playgroud)

这是background.js:

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.    

// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
  // No tabs or host permissions needed!
  chrome.tabs.executeScript({
    code: 'console.log("From injected script:" + window.<OBJECT NAME>);'
  });
});
Run Code Online (Sandbox Code Playgroud)

跑步时,我得到:

来自内容脚本:undefined从注入的脚本:undefined

但如果我做窗户.从控制台,我明白了.我甚至添加了一个超时,以确保内容脚本没有尝试获取尚未加载的内容.但我可以在脚本运行之前手动检索对象,它仍然给我未定义.

Pyt*_*tth 5

Soo,这有点hacky,但我能够做到并且有效。

为了访问主机可用的所有内容window,我必须创建一个script元素,将我想要的所有代码放入其中,然后添加document.body.appendChild(script)它才能工作。

这不是最性感的做事方式,但它可以完成小任务。

  • 我在互联网上到处寻找,但找不到任何东西。先生,你让我很高兴。谢谢你! (2认同)

Ivá*_*oko -2

根据https://developer.chrome.com/extensions/content_scripts中的文档

然而,内容脚本有一些限制。他们不可以

  • 使用网页或其他内容脚本定义的变量或函数。

因此,您可以从内容脚本访问公共窗口变量,但不能访问从网页的 javascript、另一个内容脚本或您发送到网站的对象创建的变量。