问题描述
|
我正在尝试创建我的第一个Chrome扩展程序-右键单击google搜索选项的副本。
这就是我到目前为止
function searchGoogle() {
var selectedText = window.getSelection().toString();
var serviceCall = \'http://www.google.com/search?q=\' + selectedText;
chrome.tabs.create({url: serviceCall});
}
chrome.contextMenus.create({
\"title\": \"mySearch\",\"contexts\":[\"selection\"],\"onclick\": searchGoogle
});
问题在于未捕获所选文本,并且对任何所选文本执行的查询为“ 1”。
我在这里做错了什么?为什么window.getSelection().toString()
不起作用?
按照布莱恩的建议,我尝试了这个
var query;
function getText(ocd) {
query = ocd.selectionText;
}
function searchGoogle() {
var serviceCall = \'http://www.google.com/search?q=\' + query;
chrome.tabs.create({url: serviceCall});
}
chrome.contextMenus.create({
\"title\": \"mySearch\",\"onclick\": searchGoogle
});
但它搜索http://www.google.com/search?q=undefined
我做错了什么?
解决方法
请参阅有关OnClickData对象的Google参考。当您单击上下文菜单项时,它将把其中一个作为第一个参数发送到指定的函数。因此,首先,您可能想添加一个变量来保存它。有了该变量(此处为
ocd
)后,您可以通过ocd.*
访问Google列出的属性。在这种情况下,我们要ocd.selectionText
。
您最有可能需要进行以下更改:
// Handle click event and store OnClickData object in first argument
function searchGoogle(ocd) {
var serviceCall = \'http://www.google.com/search?q=\' + ocd.selectionText;
chrome.tabs.create({url: serviceCall});
}
chrome.contextMenus.create({
\"title\": \"mySearch %s\",// display \"MySearch [selected text]\" in menu
\"contexts\":[\"selection\"],\"onclick\": searchGoogle // pass an OnClickData object to searchGoogle on click
});
由于您才刚刚起步,因此我强烈建议您参阅《 Google开发人员指南》。通常,对于所有自定义“ 9” API可用的方法,返回的值等,您通常都需要它。
而且,您的背景脚本中会呼叫window.getSelection().getString()
,对吧?它确实可以工作,但是可以通过返回您在背景页面上选择的任何文本来工作。由于您通常无法与扩展程序的背景页面进行交互,因此该字符串可能为空。