Javascript Chrome扩展不会在单击按钮时运行功能

Javascript Chrome扩展不会在单击按钮时运行功能,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有这段代码,它可以抓取你所在网站的html并将其复制到剪贴板。我目前有一个工作版本,当你点击chrome图标时复制文本,但是我想添加更多选项,所以我尝试在扩展弹出窗口中点击按钮时运行脚本 不幸的是,我不能为我的生活设法得到一些事情发生在按钮点击!当我用alerthi替换我的函数时,当我单击扩展图标而不是弹出窗口中的按钮时,它会弹出警报。救命啊 document.addEventListener'DOMContentLoaded',函数{ document.getElementByIdfull

我有这段代码,它可以抓取你所在网站的html并将其复制到剪贴板。我目前有一个工作版本,当你点击chrome图标时复制文本,但是我想添加更多选项,所以我尝试在扩展弹出窗口中点击按钮时运行脚本

不幸的是,我不能为我的生活设法得到一些事情发生在按钮点击!当我用alerthi替换我的函数时,当我单击扩展图标而不是弹出窗口中的按钮时,它会弹出警报。救命啊

document.addEventListener'DOMContentLoaded',函数{ document.getElementByIdfull_team.addEventListener'click',alertHI;; }; 单击以复制您的花名册 全队 addEventListener需要事件名称和对应该执行的函数的引用

但是,alertHI不是对函数的引用。此语句执行警报,并返回undefined

有两种方法可以解决此问题:

对于应该执行的短函数,可以使用匿名函数构造。声明

function(){ alert("HI"); }
不执行警报,但返回对调用时将执行警报的函数的引用。因此,您的代码变成:

document.getElementById("full_team").addEventListener('click', function() {
  alert("HI");
});
对于较长的函数或可重用的函数,只需创建一个命名函数:

function sayHi() {
  alert("HI");
}
 document.getElementById("full_team").addEventListener('click', sayHi);
function sayHiTo(name) {
  return function() {
    alert("Hi, " + name + "!");
  }
}

// Here, invoking the function is correct: it will return a function
document.getElementById("full_team").addEventListener('click', sayHiTo("Bob"));
同样,这定义了一个函数,但不执行它。然后,您可以使用函数的名称:

function sayHi() {
  alert("HI");
}
 document.getElementById("full_team").addEventListener('click', sayHi);
function sayHiTo(name) {
  return function() {
    alert("Hi, " + name + "!");
  }
}

// Here, invoking the function is correct: it will return a function
document.getElementById("full_team").addEventListener('click', sayHiTo("Bob"));
确保将引用传递给函数,而不是执行它:

 // Wrong!
 document.getElementById("full_team").addEventListener('click', sayHi());
说到重用函数,假设您想创建一个依赖于参数的函数。例如,假设您希望能够根据按下的元素向不同的人打招呼

然后,您可以转到更高的级别,生成一个返回函数的函数:

function sayHi() {
  alert("HI");
}
 document.getElementById("full_team").addEventListener('click', sayHi);
function sayHiTo(name) {
  return function() {
    alert("Hi, " + name + "!");
  }
}

// Here, invoking the function is correct: it will return a function
document.getElementById("full_team").addEventListener('click', sayHiTo("Bob"));

请把所有与你所看到的行为无关的东西都拿出来做一个决定;在这个过程中,你甚至可以自己解决这个问题。好吧,我添加了一个仍然不起作用的代码片段。+1用于正确制作一个最小示例。感谢你的回答,不幸的是,我的示例听起来不是一个足够好的最小示例,因为我的实际代码和其他工作确实在函数中传递。第一次尝试:如果我尝试您的第二个示例,警报会在一瞬间出现并消失,您知道为什么会发生这种情况吗?传入我的getTeam函数似乎仍然没有任何作用。好吧,试着调试代码。要检查弹出窗口,请右键单击扩展按钮并选择检查弹出窗口。当我使用SayHi功能和我自己的功能与弹出窗口交互时,控制台日志中没有任何内容。我可以使用getElementById查找我的按钮,没问题。我真的不确定从哪里开始,只是刚刚开始学习:/您的初始函数需要一个tab参数,但没有任何地方可以获得它。好的,我非常确定它需要我修改了不同扩展的tab元素,但不确定它来自哪里。最初的方法调用就是这样,工作起来很有魅力:chrome.browserAction.onClicked.addListenergetTeam;