首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Chrome扩展:如何从onMessage局部作用域函数赋值

Chrome扩展:如何从onMessage局部作用域函数赋值
EN

Stack Overflow用户
提问于 2019-05-09 00:52:16
回答 1查看 73关注 0票数 0

基本上,我要做的是从popup.js发送一条消息,方法是从输入字段中获取值,并在content_script中使用onMessage将这些值从局部范围分配到全局范围。我做不到这件事!我可以关闭onMessage函数中的整个代码,但是为了进入代码的下一个函数,我必须在chrome扩展上单击save。如果有人比我更了解chrome扩展,请检查我的代码并指导我前进。我已经用了大概一个星期了,我的头都要爆炸了!

我已经尝试在content_script中封装onMessage函数中的所有代码。我尝试过翻转发送消息的.js文件,并尝试从扩展中发送输入字段作为响应。我已经尝试将sendMessage排除在.click DOM函数之外。查看了Google Chrome扩展上的消息传递API,我感到困惑。

content.js文件

代码语言:javascript
复制
chrome.runtime.onMessage.addListener (
    function(request) {
    item_name = request.name;
    item_color = request.color;
    item_category = request.category;
    item_size = request.size;

    console.log(item_name);
    console.log(item_color);
    console.log(item_category);
    console.log(item_size);
});

var url = window.location.href;
var i;

var item_category;
var item_name;
var item_color;
var item_size;

console.log(item_name);
console.log(item_color);
console.log(item_category);
console.log(item_size);

popup.js文件

代码语言:javascript
复制
document.getElementById("save_input").onclick = function() {
  var item_name_save = document.getElementById("item_name_save").value;
  var item_color_save = document.getElementById("item_color_save").value;
  var item_category_save = document.getElementById("item_category_save").value;
  var item_size_save = document.getElementById("item_size_save").value;

  chrome.storage.sync.set({'item_name_save' : item_name_save}, function() {
    console.log('Value is set to ' + item_name_save);
  });
  chrome.storage.sync.set({'item_color_save' : item_color_save}, function() {
    console.log('Value is set to ' + item_color_save);
  });
  chrome.storage.sync.set({'item_category_save' : item_category_save}, function() {
    console.log('Value is set to ' + item_category_save);
  });
  chrome.storage.sync.set({'item_size_save' : item_size_save}, function() {
    console.log('Value is set to ' + item_size_save);
  });

  const msg = { name: item_name_save,
    color: item_color_save,
    category: item_category_save,
    size: item_size_save
  };
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, msg, function() {
    });
  });

  location.reload();
  // window.close();
}

manifest.json

代码语言:javascript
复制
{
    "manifest_version": 2,

    "name": "Supreme bot",
    "description": "A bot for Supreme",
    "version": "1.0",

    "background": {
      "scripts": ["background.js"]
    },
    "browser_action": {
      "default_icon": "icon.png",
      "default_popup": "popup.html",
      "default_title": "Supreme bot"
    },
    "content_scripts": [
        {
            "matches": ["http://*/*", "https://*/*"],
            "js": ["bot-functionallity.js"]
        }
    ],
    "permissions": [
      "activeTab",
      "tabs",
      "storage",
      "tabs"
    ]
}

(当所有代码都在onMessage函数中时,可以正常工作,但不是预期的那样) The Incorrect Functionality

我基本上不希望content.js都在onMessage函数中,因为这不能正常工作,并让它在全局范围内从onMessage函数赋值。我只想把这个信息从popup.js发送给content.js一次。

EN

回答 1

Stack Overflow用户

发布于 2019-05-09 03:31:41

我只是用chrome.storage.sync.set设置了值,并在另一个文件中使用了chrome.storage.sync.get ...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56045569

复制
相关文章

相似问题

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