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

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

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

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

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

未被捕获的ReferenceError:未定义GLOBALS

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

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

回答:

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

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

回答:

"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);

});

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

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的有限子集和跨域网络请求(前提是扩展程序已声明了这些功能的许可)。

以上是 Chrome扩展程序-从网页检索全局变量 的全部内容, 来源链接: utcz.com/qa/427540.html

回到顶部