Dan*_*iel 8 javascript google-chrome google-chrome-extension
我想触发以下代码正在侦听的点击:
chrome.browserAction.onClicked.addListener(function(tab) {});
原因是我有一个工作扩展,它在后台脚本(上面的addListener)中监听并在点击时执行一些脚本:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, {file: 'abc.js'});
chrome.tabs.executeScript(tab.id, {file: 'xxx.js'});
});
Run Code Online (Sandbox Code Playgroud)
现在我想从上下文菜单中触发这个"onClicked":
var myContextPage = chrome.contextMenus.create({"title": myTitle, "contexts":["page"],
"onclick": fctContext});
Run Code Online (Sandbox Code Playgroud)
所以,我想,最简单的方法是在fctContext中"点击".也许有更好的方法,但我不知道如何解决我的问题.我也尝试过运行"executeScript",但这两种方法都不行.
提前致谢!
//更新
答案解答: 此解决方案正在运行:
//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
});
Run Code Online (Sandbox Code Playgroud)
测试其他一些东西后的解决方案
function fctStart() {
chrome.tabs.getSelected(null, function(tab){
chrome.tabs.executeScript(tab.id, {file: 'abc.js'});
chrome.tabs.executeScript(tab.id, {file: 'xxx.js'});
});
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,fctStart()无需通过选项卡即可在任何时候工作.
请记住,参数在 JavaScript 中是可选的。每个函数都有一个关联的arguments对象。该参数充当数组。就您而言,其中一个需要这样做,而另一个则不需要。在一个函数(浏览器操作)中拥有 N 个参数与在另一个函数(上下文菜单)中拥有 M 个参数是相同的,这两个参数之间的唯一区别是它提供了一种在arguments.callee函数本身内引用实际代码的方法。如果您想要一些基本的东西,则不必担心这一点。
您fctContext可以是浏览器操作单击和上下文菜单之间的可共享代码。我在“重新加载所有选项卡”扩展中做了类似的事情。
this.reload在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
});
Run Code Online (Sandbox Code Playgroud)
上述方法的问题是可维护性,如果 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) }
});
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
| 归档时间: |
|
| 查看次数: |
6156 次 |
| 最近记录: |