javascript - 在 chrome.tabs.executeScript 中使用 background.js 变量

标签 javascript google-chrome google-chrome-extension

使用chrome.tabs.executeScript,如何在插入的内容脚本中使用background.js 中的变量?我的意思是这样的:

(...)
var identificador = target.selectionText;
chrome.tabs.executeScript(null,
                       {code:"alert(identificador);"});
(...)

这只是我需要做的一个例子。在我的扩展中,我的目标是设置一个变量,其中选择一部分文本(使用上下文菜单),当重新加载网络时,在文档中搜索它,如果找到匹配项,请提醒我。我知道做到这一点的唯一方法是使用正则表达式和 document.body.innerText ,但我相信我只能使用 document.body.innerText 注入(inject) JS 和 执行脚本。那么...还有更好的方法吗?如果没有,我如何将带有文本部分的变量发送到 executeScript 执行的代码?

最佳答案

将信息从后台页面 (background.js) 传递到正在查看的网页的最佳方法是使用 Content Scripts 的组合。和 Message Passing .

内容脚本允许您将 JS 文件添加到网页。这将用于接收来自background.js的消息并在网页DOM上执行操作。

消息传递为您提供了一种通过传递 JSON 对象在后台页面和网页之间进行通信的机制。

添加内容脚本的示例:

{
    "name": "My extension",
    "permissions": [
        "tabs"
    ],
    "content_scripts": [{
        "js": ["myscript.js"]
    }]
}

background.js 的示例内容:

// Get the current tab and send a message from it:
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendMessage(tab.id, {
        identificador: target.selectionText
    });
});

myscript.js 的示例内容:

// Listen to the message
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log(request.identificador);      
});

请注意,Google 现在建议您使用 Event Pages而不是Background Pages .

关于javascript - 在 chrome.tabs.executeScript 中使用 background.js 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500393/

相关文章:

javascript - 有没有办法在自定义按钮单击之前上传文件,然后使用 ajax 将其发送到 Controller 操作方法?

javascript - 如何将事件监听器添加到 chrome 扩展内容脚本中的 google 表格链接?

google-chrome - 如果未设置过期和/或无缓存 header ,Google Chrome 浏览器会缓存资源多长时间?

html - Chrome 选择/下拉控件缺少边框 - 最新的 Chrome (69.0.3497)、Windows 10

google-chrome - Chrome Bookmarks API - 使用 'Move' 对同一文件夹中的书签重新排序

jquery - Chrome 扩展程序 将消息从后台发送到内容脚本

javascript - Rails 5 + Webpacker 应用程序作为空白页面部署到 Heroku,没有失败

javascript - 我应该创建一个标量/数字类来防止浮点错误吗?

javascript - 无法从 JavaScript 函数重置全局计时器

css - Chrome,Custom.css 并不总是有效