- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写我的第一个浏览器扩展程序,但我似乎无法通过单击上下文菜单项来触发单击处理程序。 console.log 调用似乎没有向控制台吐出任何东西,我尝试使用 alert() 以防万一“背景”脚本(不确定背景和内容脚本之间的区别究竟是什么),但是似乎也没有做任何事情。
当我在测试页面的输入中选择一些文本时,右键单击并选择加密或解密,没有任何反应;不在控制台或开发人员工具的网络选项卡中。我做错了什么?
manefest.json:
{
"manifest_version": 2,
"name": "my name",
"description": "my description",
"version": "1.0",
"background": {
"scripts": ["jquery-3.2.1.min.js", "background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["content_script.js"]
}
],
"permissions": [
"activeTab",
"contextMenus",
"http://my.hostname.com/"
]
}
background.js:
/**
* A handler which will run the analysis of the DOM element's selected text
*/
function clickHandler(info, tab) {
"use strict";
console.log(info);
console.log(tab);
// get selected text as encrypt/decrypt
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, "get selection", null, function(selection) {
var data = {
"action": action,
"selection": selection
};
var max_length = 4095;
if (data.selection.length > max_length) {
data.selection = data.selection.substring(0, max_length);
}
var url = "http://my.hostname.com/";
jQuery.post(url, data, function (response) {
chrome.tabs.sendMessage(tabs[0].id, response);
}, "json");
});
});
}
/**
* Create a context menu items to allow encode/decode
*/
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({
"id": "encrypt",
"title": "Encrypt",
"type": "normal",
"contexts": ["editable"]
});
chrome.contextMenus.create({
"id": "decrypt",
"title": "Decrypt",
"type": "normal",
"contexts": ["selection"]
});
chrome.contextMenus.onClicked.addListener(clickHandler);
});
最佳答案
您需要将 contextMenus.onClicked 移到 onInstalled 之外。
chrome.runtime.onInstalled.addListener(function() {
//create context menus
})
chrome.contextMenus.onClicked.addListener(function() {
//handle context menu actions
})
“注册以在每次加载事件页面时接收您的扩展程序感兴趣的任何事件。事件页面将为您的扩展程序的每个新版本加载一次。之后它只会被加载以传递您已注册的事件这一般意味着你的事件监听器应该添加在事件页面的顶级范围内,否则在事件页面重新加载时它们可能不可用。如果你在安装或升级扩展时需要做一些初始化,监听到 runtime.onInstalled 事件。这是注册 declarativeWebRequest 规则、contextMenu 条目和其他此类一次性初始化的好地方。"
https://developer.chrome.com/extensions/event_pages#best-practices
关于google-chrome-extension - 似乎无法让 chrome.contextMenus.onClicked 在 Chrome 扩展程序中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44248143/
如果 contextMenu 重叠,是否有办法排除其中一种类型? 示例: 我有两个上下文项,可编辑和选择。 在这两种类型匹配的情况下,(可编辑内的选择) Chrome 为这两个操作提供了子菜单。 我只
我正在开发一个大量使用上下文菜单的 Google Chrome 扩展程序,我想让某些菜单项仅在某些域上可用。 目前,我正在使用 chrome.tabs.onUpdated 和 chrome.tabs.
我正在使用 chrome.contextMenus.create 函数在我的 Chrome 扩展程序中创建上下文菜单。但它创造了额外的选择。 我在我的 manifest.json 文件中授予了权限,在
我正在使用事件页面!并且需要创建带有子菜单的上下文菜单(深树)。 它有多深取决于用户数据。并且该上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以通过一些逻辑来降低这些更新的频率,但它仍然可
这个问题已经有答案了: Dynamic extension context menu that depends on selected text (2 个回答) 已关闭 7 年前。 我正在尝试根据选择
这个问题在这里已经有了答案: TypeError: [API] is undefined in content script or Why can't I do this in a content
我正在开发 Mozilla WebExtension。我只想将 JavaScript 文件注入(inject)到我单击使用 contextMenus.create() 创建的上下文菜单选项的框架中。
我正在为自己开发一个 Google Chrome 扩展程序。它向每个页面上图像的右键单击上下文菜单添加了一个额外的菜单项。 目前,我的扩展没有问题,但是当我检查控制台日志时,我看到了这个错误日志: U
这是我的 contextMenus.create 函数,它抛出无法读取未定义的创建属性 错误。 chrome.contextMenus.create({ "title": "Buzz This"
我尝试创建一个简单的 chrome 扩展来在 chrome 的上下文菜单中添加一个选项。 这是我的 manifest.json { "manifest_version": 2, "back
使用 ScenicView ,我希望能够检查诸如 ContextMenu 之类的东西s 或 ComboBox 的内部,但是(正如他们应该的那样)在上述检查发生之前它们就消失了: 除了将每个控件的行为更
我在 Button 上有一个 ContextMenu,我想在 MouseEnter 事件上打开它,而不是在默认的右侧-点击事件。这是我的 XAML:
早上好,我一直在尝试自己修复这个错误,但我还不能完全理解它出了什么问题。总结: 我制作了一个 Chrome 扩展程序,我想将其用作书签栏。扩展中的链接将由我自己提供。它们都是在线托管的 URL。 为了
我指的是 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus/onClicked .我已使用此示例中的
我已经为 Firefox(52.2.1 32 位)构建了一个小型 WebExtension,主要基于 example provided by the Mozilla Developers Networ
我正在创建我的第一个 Chrome 扩展程序,我需要一些帮助。我认为一切正常,除了我无法获取选项卡的当前 URL。 var menu = chrome.contextMenus.create({
作为标题,如何将修改应用到另一个页面,不同于背景? list : { "name": "First Extension", "version": "1.0", "descrip
我正在尝试创建一个 chrome 扩展。目前我正准备为我的扩展创建上下文菜单,当我点击它时它会做一些事情。所以,下面我创建父级的谷歌文档。 chrome.contextMenus.create({ti
我正在尝试编写我的第一个浏览器扩展程序,但我似乎无法通过单击上下文菜单项来触发单击处理程序。 console.log 调用似乎没有向控制台吐出任何东西,我尝试使用 alert() 以防万一“背景”脚本
我是一名优秀的程序员,十分优秀!