当前位置: 首页 > 面试题库 >

Chrome扩展程序-从网页检索全局变量

秦宏盛
2023-03-14
问题内容

我正在为Chrome扩展程序。我希望解析“原始” Gmail邮件(当前查看的邮件)的内容。

我试图利用jQuery.load()如下

$(windows).load(function() { alert(GLOBALS); });

并将其放置在内容脚本中,但是它也不起作用。我正在使用Chrome的开发人员工具,该工具会在调用时返回以下错误alert(GLOBALS);

未被捕获的ReferenceError:未定义GLOBALS

尽管在使用开发人员工具的控制台时,在控制台中键入GLOBALS它会返回一个数组。

有什么线索如何从内容脚本访问GLOBALS吗?


问题答案:

内容脚本在隔离的环境中运行。要访问(页面的window)任何全局属性,您必须注入一个新<script>元素,或使用事件侦听器来传递数据。

有关在页面上下文中注入元素的示例,请参见此答案<script>

contentscript.js"run_at": "document_end"清单中):

var s = document.createElement('script');
s.src = chrome.extension.getURL('script.js');
(document.head||document.documentElement).appendChild(s);
s.onload = function() {
    s.remove();
};

// Event listener
document.addEventListener('RW759_connectExtension', function(e) {
    // e.detail contains the transferred data (can be anything, ranging
    // from JavaScript objects to strings).
    // Do something, for example:
    alert(e.detail);
});

script.js -位于扩展目录中,这将被注入页面本身:

setTimeout(function() {
    /* Example: Send data from the page to your Chrome extension */
    document.dispatchEvent(new CustomEvent('RW759_connectExtension', {
        detail: GLOBALS // Some variable from Gmail.
    }));
}, 0);

由于此文件是通过DOM中的chrome-extension:URL加载的,因此必须将“
script.js”添加到清单文件的web_accessible_resources部分。否则,Chrome将拒绝加载脚本文件。

您应该在网页中运行尽可能少的逻辑,并在内容脚本中处理大部分逻辑。这有多个原因。首先,页面中注入的任何脚本都在与网页相同的上下文中运行,因此,网页可以(有意或无意)修改JavaScript
/ DOM方法,以使扩展程序停止工作。其次,内容脚本可以访问其他功能,例如chrome。*
API的有限子集和跨域网络请求(前提是扩展程序已声明了这些功能的许可)。



 类似资料:
  • 问题内容: 我知道如何在Selenium Webdriver中加载Chrome扩展程序。但是我没有看到任何描述如何从Selenium 运行 chrome扩展的帖子/博客。 我需要明确地使chrome扩展程序运行/使其从selenium中执行其功能。例如,我想使用带有Selenium Webdriver的扩展程序清除Chrome浏览器的缓存。 我可以先做吗?还是Selenium WebDriver仅

  • 这一章,我们将学会如何在PHP扩展中使用全局变量。 在扩展中定义全局变量 首先,我们需要在扩展的头文件中(默认是php_*.h)中定义所有的全局变量。举个例子,比如我们要定义一个无符号的long类型的全局变量,我们可以这样定义: ZEND_BEGIN_MODULE_GLOBALS(sample4) unsigned long counter; ZEND_END_MODULE_GLOBALS

  • 问题内容: 我有一个Chrome扩展程序。我需要从当前页面的HTML源进行分析。我在这里找到了各种带有背景页面和内容脚本的解决方案,但没有一个对我有帮助。这是我到目前为止所拥有的: manifest.json: background.html: content.js: 警报始终警报未定义。即使我在content.js文件中将回调函数更改为: 结果还是一样。我究竟做错了什么?也许我走错路了。我真正需

  • 问题内容: 我想创建一个Google Chrome扩展程序。具体来说,我想制作一个打包的应用程序,而不是一个托管的应用程序。我认为这限制了我使用JavaScript(和HTML / CSS)是否正确? 我的问题是我需要做一些复杂的数学运算(奇异值分解,因子分析),并且我不想在javascript中为此编写算法。Python已经有了我需要的功能的库(SciPy),但是我找不到任何可以使用python

  • 问题内容: 我正在构建一个Chrome扩展程序,该扩展程序仅适用于我工作的公司内部的人员。该扩展需要输入-可以通过对共享的MySQL DB服务器的简单查询生成输入(所有员工都可以以只读权限访问该服务器)。 问题是-由于扩展是所有客户端(主要是Javascript)-访问数据库和运行查询的最简单方法是什么?我是否必须创建一个针对扩展名的php / java(/ …)服务? 问题答案: 您必须创建一个

  • 问题内容: 我正在构建Chrome扩展程序,并且为了使整个工作正常进行,我需要一个外部JavaScript脚本来检测用户是否安装了我的扩展程序。 例如:用户安装了我的插件,然后访问了带有我的脚本的网站。该网站检测到我的扩展程序已安装,并相应地更新页面。 这可能吗? 问题答案: 我敢肯定,有一种直接方法(直接在扩展程序上调用函数,或通过使用JS类进行扩展),但是有一个间接方法(直到出现更好的情况):