Javascript Chrome扩展卡';不要在后台页面中调用任何方法
我已经尝试了一段时间,但是我无法在我的背景页面js文件上调用任何方法 我的清单如下所示: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
{
"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了。你介意发布一个答案吗?这样我就可以给你答案了,你应该得到这个代表。