我正在编写一个chrome扩展程序,当有选择时显示contextMenu,这非常简单:
var item = chrome.contextMenus.create({
"title": "myTitle",
"contexts": ["selection"],
"id": "myItem"
});
现在,我想为那个创建子菜单项,但是基于所选文本。我发现我可以通过在加载时添加回调来执行此操作,并将所选文本显示为子菜单项,如下所示:
var item = chrome.contextMenus.create({
"title": "myTitle",
"contexts": ["selection"],
"id": "myItem"
}, function() {
// Create item with the selected text
var subItem = chrome.contextMenus.create({
"title": "%s",
"contexts": ["selection"],
"parentId": "myItem",
"id": "mySubItem"
});
});
这是有效的,但是我想根据所选字符串的最后两个字符做一些事情,但我不能这样做。通过在函数中添加一些内容,如下所示:
var selection = "%s";
if(selection.splice(-2) == "ab") { }
var subItem...
它不起作用,因为selection.splice(-2)
返回所选字符串。它就是这样做的,因为它正在做"%s" .splice(-2)这只是"%s"所以它从未真正对所选文本进行操作。我已经验证了这一点,因为selection.splice(-1)
返回" s",它不会返回所选内容的最后一个字符。
如何在此处理所选文字?
答案 0 :(得分:0)
这很难。
'%s'
在分配给上下文菜单的属性时仅具有特定的特殊含义。在创建上下文菜单项时尚未知道(尚未选择任何内容),因此您无法对其进行操作。
Chrome在上下文菜单中显示的文字方面不灵活,因为没有像onBeforeShowMenu
这样的事件来操纵该文本或指定一个返回条目标签的函数的方法。也就是说,除非您尝试通过在选择时更新上下文菜单来对Chrome进行竞争。
然而,这是非常复杂的。这个回答shows a potential way to do it。
答案 1 :(得分:-1)
您是否尝试过使用纯JavaScript API? window.getSelection
var selectionText = window.getSelection().toString();
console.log(selectionText.slice(-2));
顺便说一下,我认为你应该切片( - 2)或 substring (selectionText.length - 2),因为 splice ( - 2)将更改原始数组。