Javascript Chrome扩展卡';不要在后台页面中调用任何方法

Javascript Chrome扩展卡';不要在后台页面中调用任何方法,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我已经尝试了一段时间,但是我无法在我的背景页面js文件上调用任何方法 我的清单如下所示: { "name" : "First chrome extension", "version" : "0.0.1", "manifest_version" : 2, "browser_action" : { "default_title" : "Practice", "default_icon" : { "16" : "assets/images/icon16.pn

我已经尝试了一段时间,但是我无法在我的背景页面js文件上调用任何方法

我的清单如下所示:

{
  "name" : "First chrome extension",
  "version" : "0.0.1",
  "manifest_version" : 2,
  "browser_action" : {
    "default_title" : "Practice",
    "default_icon" : {
      "16" : "assets/images/icon16.png",
      "24" : "assets/images/icon24.png",
      "32" : "assets/images/icon32.png"
    },
   "default_popup" : "popup.html"
  },
  "background" : {
    "scripts" : ["background.js"]
  },
  "content_scripts" : [{
    "matches" : ["*://*/*"], 
    "js" : [
      "assets/js/jquery-3.2.1.slim.min.js",
      "assets/js/content.js"
     ]
  }],
  "permissions" : [
    "activeTab",
    "storage"
  ]
}
background.js:

function test()
{
  return 'called';
}
assets/js/popup.js:

console.log(chrome.extension.getBackgroundPage().test());
$(function() {
  const btn = '#en-dis-btn';
  $(btn).click(function(e){
    e.preventDefault();
    chrome.runtime.sendMessage({'msg' : 'bg-test'}, function(response) {
       console.log(response);
    });
  });
});
我看到的大多数示例都使用chrome.extension.getBackgroundPage方法来检索背景,但每当我尝试此方法时,它都会告诉我background.js中设置的方法或任何其他变量未定义,并且它们不存在于返回的窗口对象中

我还尝试使用消息传递API,如下所示: background.js

"use strict";

const test = function() {
    console.log(1);
}

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse){
    console.log(request);  
    if(request.msg.toLowerCase()  === "bg-test") test();
  }
);
assets/js/popup.js:

console.log(chrome.extension.getBackgroundPage().test());
$(function() {
  const btn = '#en-dis-btn';
  $(btn).click(function(e){
    e.preventDefault();
    chrome.runtime.sendMessage({'msg' : 'bg-test'}, function(response) {
       console.log(response);
    });
  });
});
但是background.js中的侦听器永远不会被调用。我可能做错了什么?背景页不是空的,因此它正在加载内容。

根据:

const
声明定义作用于运行执行上下文的词典环境的变量

当您在一个页面(背景页面)中全局声明let/const变量时,该变量的词典环境的作用域是该页面的全局
this
(相当于该页面的
窗口
),而另一个页面(弹出窗口)显然超出了该作用域


使用
var foo=bar
function foo(){}
声明,将其作为
窗口
对象的属性公开,以便在另一个相同来源的
chrome扩展名://*extensionID*
页面(如弹出页面)中可见。

1)
“脚本”:[“background.js”]
应该使用
资产/js/background.js
-是打字错误吗?2) 您没有通过侦听器中的sendResponse发送任何响应。3) 开始使用devtools调试器:在后台页面和弹出窗口中设置断点,运行代码并查看发生了什么。4) 请确保在上重新加载扩展插件chrome://extensions 第5页)以防万一,@wOxxOm这是一个打字错误,但代码中的内容是正确的,我只是在这里写错了。2) 我知道,我现在只需要运行控制台日志,但还没有到那个地步。3) 我将在后台设置断点,并返回给您4)始终重新加载和使用扩展控制台,以便查看日志。我成功地删除了扩展并再次添加了扩展,消息传递工作正常,但我仍然不明白为什么无法使用getBackgroundPage()获取方法,这是我的主要问题。如果您使用
const test=function(){}
,可能会发生这种情况,因为无法从其他页面访问const/let变量。@wOxxOm Dang,我忘记了let和const的作用域。我已经好几个月没有使用Javascript了。你介意发布一个答案吗?这样我就可以给你答案了,你应该得到这个代表。