首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将参数从后台脚本传递到chrome扩展中的内容脚本?

如何将参数从后台脚本传递到chrome扩展中的内容脚本?
EN

Stack Overflow用户
提问于 2018-02-08 19:49:51
回答 2查看 3.3K关注 0票数 5

我有一个chrome扩展,它从后台脚本调用内容脚本,将HTML插入到网页中。

当我调用内容脚本(inject.js)时,我想从内容脚本(eventpage.js)中传递一些参数,但是这样做有一些困难。我也不想使用利用chrome.storage或本地存储的解决方案。

Manifest.json (相关部件):

代码语言:javascript
代码运行次数:0
运行
复制
{
  "manifest_version": 2,
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["inject.js"]
    }
  ],
  ...     
  "background": {
    "scripts": ["eventpage.js",...],
    "persistent": false
  },

}

Eventpage.js (背景):

代码语言:javascript
代码运行次数:0
运行
复制
// Want to add the parameter here

chrome.tabs.executeScript(tabId, {
    file: 'inject.js'
});

Inject.js (内容):

代码语言:javascript
代码运行次数:0
运行
复制
(function() {

    // Want to retrieve the parameter passed from eventpage.js here

})();
EN

回答 2

Stack Overflow用户

发布于 2018-02-09 14:50:46

使用信息传递

Eventpage.js

代码语言:javascript
代码运行次数:0
运行
复制
// Want to add the parameter here
var parameterToSend;

chrome.tabs.executeScript(tabId, {
    file: 'inject.js'
}, function() {
    chrome.tabs.sendMessage(tabId, {parameter: parameterToSend});
});

Inject.js

代码语言:javascript
代码运行次数:0
运行
复制
(function() {

    // Want to retrieve the parameter passed from eventpage.js here

    chrome.runtime.onMessage.addListener(function(message) {
        var receivedParameter = message.parameter;

        //use receivedParameter as you wish.

    });

})();
票数 4
EN

Stack Overflow用户

发布于 2018-02-08 21:11:29

您想要使用的解决方案有时很方便,但它并不称为内容脚本,它用于在页面上插入HTML的不同情况。您正在尝试将JS的一部分直接插入到网站中,而将inject.js文件指定为内容脚本。

WebExtensions标准中的内容脚本意味着脚本可以访问网页的HTML (除去一些限制,比如iframes)并可以修改它。

考虑将背景脚本的内容更改为:

代码语言:javascript
代码运行次数:0
运行
复制
chrome.tabs.query({active:true, lastFocusedWindow: true}, function(tabs){
    if (tabs.length > 0) {
        chrome.tabs.sendMessage(tabs[0].id, {
           type:"message-type",
           param: 'param'
         });
}});   

在内容脚本中,为从后台检索的消息添加侦听器

代码语言:javascript
代码运行次数:0
运行
复制
chrome.extension.onMessage.addListener(callback);

其中callback变量应该是要在inject.js文件中运行的函数。这个函数可能在其签名中得到一个参数,当它执行时,它包含作为chrome.tabs.sendMessage函数的第二个参数传递的JS对象。

在这种情况下

代码语言:javascript
代码运行次数:0
运行
复制
 var callback = function(data) {
    // here in data.param you have your parameter
 }

另外,如果您确实需要使用代码注入,那么您必须做两件事:

  1. inject.js的content_script部分中删除manifest.json,并将其添加到web_accessible_resources部件中。
  2. 阅读有关注入代码将一个参数传递给使用chrome.tabs.executeScript()注入的内容脚本的所有必要信息
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48693659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档