请记住,参数在 JavaScript 中是可选的。每个函数都有一个关联的arguments
目的。该参数充当数组。就您而言,其中一个需要这样做,而另一个则不需要。在一个函数(浏览器操作)中拥有 N 个参数与在另一个函数(上下文菜单)中拥有 M 个参数是相同的,这两个参数之间的唯一区别是arguments.callee
它提供了一种在函数本身中引用实际代码的方法。如果您想要一些基本的东西,则不必担心这一点。
Your fctContext
可能是您的 browserAction 单击和上下文菜单之间的可共享代码。我在“重新加载所有选项卡”扩展中做了类似的事情。
搜索this.reload
in https://github.com/mohamedmansour/reload-all-tabs-extension/blob/master/js/reload_controller.js https://github.com/mohamedmansour/reload-all-tabs-extension/blob/master/js/reload_controller.js,你会注意到this.reload
用于上下文菜单和浏览器操作。您只需分享代码即可。
更新了参数示例:
就您而言,您会做完全相同的事情。
// Shared code. When the argument length is two, it is coming from the context
// menu, while a single argument is coming from the browser action.
function fctContext() {
var tab = arguments.length == 2 ? arguments[1] : arguments[0];
// Do whatever you want with the tab.
}
// Browser Action
chrome.browserAction.onClicked.addListener(fctContext);
// Context Menu
chrome.contextMenus.create({
title: myTitle,
contexts: ['page'],
onclick: fctContext
});
上述方法的问题是可维护性,如果 API 发生变化,它可能会崩溃。就我个人而言,我宁愿明确地指出这些论点。因此用户不必在参数数组中进行查找。
function fctContext(tab) {
// Do whatever you want with the tab.
}
// Browser Action
chrome.browserAction.onClicked.addListener(fctContext);
// Context Menu
chrome.contextMenus.create({
title: myTitle,
contexts: ['page'],
onclick: function (detail, tab) { fctContext(tab) }
});
希望有帮助!