上下文菜单数组?
Context Menu array?
我为公司网站编写了一个简单的扩展程序,它可以读取项目数组,并在我将鼠标悬停在项目标题上时提醒它。这非常有效,但这不是我要找的:
let projects = document.getElementsByClassName("project-name");
extract_data = function() {
let title = this.getElementsByClassName("project-name ng-binding")[0].getAttribute("title")
alert(title);
};
for (var i = 0; i < projects.length; i++) {
projects[i].addEventListener('mouseover', extract_data, false);
}
我想稍微修改我的代码,而不是在鼠标悬停时发出警报,而是将警报作为选项添加到 Chrome 上下文菜单中。类似于:
chrome.contextMenus.create({
title: "Alert Project Title",
contexts:["selection"], // ContextType
onclick: extract_data // A callback function
});
这不太正确,因为我需要将上下文菜单更改为依赖于项目行,正如现在所写的那样,上下文菜单没有对 projects
的引用。
有什么简单的方法可以改变我的 mouseover
成为 contextMenu
的值吗?
如果您希望菜单显示带有所选项目标题的项目,我认为您运气不好。我不相信有办法做到这一点。
但是如果你想让菜单显示你选择的项目,试试这个。
chrome.contextMenus.create({
"id": "1",
title: "Do you want to alert '%s' project title",
"contexts": ["selection"],
"documentUrlPatterns": [...],
onclick: extract_data // A callback function
})
也许是我操之过急
如果您希望菜单显示带有所选项目标题的项目(不是所选文本)
如果您想将 ALERT 作为单个上下文菜单项 onclick 事件移动
我认为你有机会!
但是您必须声明性地
注入内容脚本
/* in manifest.json */
...
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["cs.js"],
"run_at": "document_idle"
}]
...
/* in content script "cs.js" */
function extract_data() {
var title = this.getElementsByClassName("project-name ng-binding")[0].getAttribute("title");
chrome.runtime.sendMessage({'title': title}, resp =>
console.log('backgroung script has received the message and send back this message: ' + resp.msg)
)
}
var projects = document.getElementsByClassName("project-name");
for (var i = 0; i < projects.length; i++)
projects[i].addEventListener('mouseover', extract_data, false)
/* in background script */
function createMenu() {
chrome.contextMenus.create({
'id': '1',
'title': 'Alert Project Title',
'contexts': ["selection"],
'documentUrlPatterns': ["<all_urls>"],
'enabled': false
}, _ => {
if (chrome.runtime.lastError) {} else {}
})
}
function handleInstalled(details) {
createMenu()
}
chrome.runtime.onInstalled.addListener(handleInstalled);
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
chrome.contextMenus.update(
'1',
{
"title": "Do you want to alert " + msg.title + " project title",
'contexts': ["selection"],
'documentUrlPatterns': ["<all_urls>"],
"enabled": true,
"onclick": _ => alert(msg.title)
},
_ => {
sendResponse( {'msg': chrome.runtime.lastError ? 'Some error...' : 'Fine!' } )
}
)
return true
})
我为公司网站编写了一个简单的扩展程序,它可以读取项目数组,并在我将鼠标悬停在项目标题上时提醒它。这非常有效,但这不是我要找的:
let projects = document.getElementsByClassName("project-name");
extract_data = function() {
let title = this.getElementsByClassName("project-name ng-binding")[0].getAttribute("title")
alert(title);
};
for (var i = 0; i < projects.length; i++) {
projects[i].addEventListener('mouseover', extract_data, false);
}
我想稍微修改我的代码,而不是在鼠标悬停时发出警报,而是将警报作为选项添加到 Chrome 上下文菜单中。类似于:
chrome.contextMenus.create({
title: "Alert Project Title",
contexts:["selection"], // ContextType
onclick: extract_data // A callback function
});
这不太正确,因为我需要将上下文菜单更改为依赖于项目行,正如现在所写的那样,上下文菜单没有对 projects
的引用。
有什么简单的方法可以改变我的 mouseover
成为 contextMenu
的值吗?
如果您希望菜单显示带有所选项目标题的项目,我认为您运气不好。我不相信有办法做到这一点。
但是如果你想让菜单显示你选择的项目,试试这个。
chrome.contextMenus.create({
"id": "1",
title: "Do you want to alert '%s' project title",
"contexts": ["selection"],
"documentUrlPatterns": [...],
onclick: extract_data // A callback function
})
也许是我操之过急
如果您希望菜单显示带有所选项目标题的项目(不是所选文本) 如果您想将 ALERT 作为单个上下文菜单项 onclick 事件移动 我认为你有机会!
但是您必须声明性地
注入内容脚本/* in manifest.json */
...
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["cs.js"],
"run_at": "document_idle"
}]
...
/* in content script "cs.js" */
function extract_data() {
var title = this.getElementsByClassName("project-name ng-binding")[0].getAttribute("title");
chrome.runtime.sendMessage({'title': title}, resp =>
console.log('backgroung script has received the message and send back this message: ' + resp.msg)
)
}
var projects = document.getElementsByClassName("project-name");
for (var i = 0; i < projects.length; i++)
projects[i].addEventListener('mouseover', extract_data, false)
/* in background script */
function createMenu() {
chrome.contextMenus.create({
'id': '1',
'title': 'Alert Project Title',
'contexts': ["selection"],
'documentUrlPatterns': ["<all_urls>"],
'enabled': false
}, _ => {
if (chrome.runtime.lastError) {} else {}
})
}
function handleInstalled(details) {
createMenu()
}
chrome.runtime.onInstalled.addListener(handleInstalled);
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
chrome.contextMenus.update(
'1',
{
"title": "Do you want to alert " + msg.title + " project title",
'contexts': ["selection"],
'documentUrlPatterns': ["<all_urls>"],
"enabled": true,
"onclick": _ => alert(msg.title)
},
_ => {
sendResponse( {'msg': chrome.runtime.lastError ? 'Some error...' : 'Fine!' } )
}
)
return true
})