bai*_*aik 19 google-chrome google-chrome-extension
我一直在研究一个小的Chrome扩展程序,但我似乎无法解决这个问题,并希望有人能够以全新的视角审视它.
目标是创建一个chrome扩展,使您可以在任何给定的网站上选择文本,并显示一个选项,使用contextmenu项目将选择发送到另一个网站.
我的manifest.json看起来像这样:
{
"name": "Context Menu Search",
"description": "Opens the selected text as keyword in a new window",
"version": "0.1",
"permissions": ["contextMenus"],
"background_page": "background.html"
}
Run Code Online (Sandbox Code Playgroud)
然后是background.html:
<script src="rightclick.js"></script>
Run Code Online (Sandbox Code Playgroud)
和rightclick.js:
var selection_callbacks = [];
function getSelection(callback) {
selection_callbacks.push(callback);
chrome.tabs.executeScript(null, { file:"selection.js" });
};
chrome.extension.onRequest.addListener(function (request) {
var callback = selection_callbacks.shift();
callback(request);
});
function sendSearch(selectedText) {
var serviceCall = 'http://www.google.com/search?q=' + selectedText;
chrome.tabs.create({url: serviceCall});
}
var tx = getSelection();
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":[selection],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
Run Code Online (Sandbox Code Playgroud)
加上selection.js:
chrome.extension.sendResponse(window.getSelection().toString());
Run Code Online (Sandbox Code Playgroud)
到目前为止,上下文菜单创建工作正常,但根本不显示所选文本.如果有人对如何解决这个问题有任何建议以及简化脚本,我将不胜感激.
非常感谢你.
ser*_*erg 59
UPDATE
我只是查看了文档,所有这些都可以更简单地完成,没有任何内容脚本和回调:
chrome.contextMenus.create({
title: "Test %s menu item",
contexts:["selection"],
onclick: function(info, tab) {
sendSearch(info.selectionText);
}
});
Run Code Online (Sandbox Code Playgroud)
这就是您所需要的,因为您可以%s在菜单标题中使用以获取所选文本.
(不再需要以下所有内容)
您的getSelection()方法不返回所选文本,它只是将内容脚本注入页面.稍后会收到所选文本onRequest,然后将其作为参数从回调数组传递给回调函数.
这部分:
var tx = getSelection();
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":[selection],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
Run Code Online (Sandbox Code Playgroud)
需要改为这样的事情:
getSelection(function(tx) {
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":["selection"],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
})
Run Code Online (Sandbox Code Playgroud)
但是我会selection_callbacks完全摆脱那个数组,因为我觉得不需要它:
chrome.extension.onRequest.addListener(function (request) {
var tx = request;
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":["selection"],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
});
Run Code Online (Sandbox Code Playgroud)
还要注意"contexts":[selection]需要"contexts":["selection"],并且"onclick": sendSearch(tx)需要像这样:
"onclick": function(info, tab) {
sendSearch(info.selectionText);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16935 次 |
| 最近记录: |