我已经开始为Google Chrome构建一个简单的扩展程序,当右键单击一个链接或在选择一些文本的情况下单击鼠标右键时,它将添加一个新的上下文菜单项。该菜单项应包含
形式的文本 Search for "{link/select text}" on XYZ
如果我只是对选定的文本感兴趣,我可以这样设置标题格式:
Search for "%s" on XYZ
打开上下文菜单时,%s将变成所选的文本。桃花但是,将鼠标悬停在链接上时要获得相同的行为并非易事。该字符串变成Search for "" on XYZ
,这当然是不可接受的。对于这两种情况,我都希望具有相同的行为。
我为Firefox创建了一个类似的扩展程序,其中有一个onShown
事件,该事件在上下文菜单打开时触发,并为您提供具有linkText
和selectionText
属性的对象。我使用该事件的侦听器将要搜索的文本保存在全局变量中,并调用上下文菜单项的update
方法。
不幸的是,我无法通过上下文菜单的Chrome API找到解决方法。这里有update方法,所以我可以更改标题,但找不到onShown
之类的事件,无法在其中检索两个值并调用此update方法。
到目前为止,这是我的代码:
var url = "https://www.some-website.com/search?q=";
var searchterm = "";
var contexts = ["selection","link"];
var title = `Search "%s" on XYZ`;
var id = "contextSearch";
// Install our extension when chrome.runtime.onInstalled is called
chrome.runtime.onInstalled.addListener(function() {
// Create the context menu item
chrome.contextMenus.create(
{
"id": id,
"title": title,
"contexts": contexts,
"onclick": contextMenuAction
},
// Show successful creation in log
function() {
console.log("successfully created");
});
});
function contextMenuAction(info, tab) {
console.log(info);
console.log(tab);
// Save the searchterm and open a new tab to execute the search
searchterm = info.selectionText;
chrome.tabs.create({url: url+searchterm});
}
info
和tab
对象不包含有关链接文本的任何信息,即使它们包含链接文本,也为时已晚,因为我需要在打开上下文菜单时获取该文本。你知道有什么方法可以实现我的目标吗?如果我的Chrome扩展程序的功能少于Firefox的功能,那将是可悲的。