javascript - 如何将选定的文本正确捕获到 Google Chrome 中的变量中?

标签 javascript google-chrome google-chrome-extension

我正在尝试创建我的第一个 Chrome 扩展程序 - 右键单击​​谷歌搜索选项的副本。

这是我目前的情况

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
});

问题是未捕获所选文本,对任何所选文本执行的查询是 http://www.google.com/search?q=

我在这里做错了什么?为什么 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",
  "contexts":["selection"],
  "onclick": searchGoogle
});

但它会搜索 http://www.google.com/search?q=undefined

我做错了什么?

最佳答案

参见 Google's reference on the OnClickData目的。当您单击上下文菜单项时,它会将其中一个作为第一个参数发送给指定的函数。所以,首先,您可能想添加一个变量来保存它。一旦您拥有该变量(此处为 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's Developer's Guide .对于所有自定义 chrome.* API,它通常包含您需要的可用方法、它们返回的值等。

另外,window.getSelection().getString() 是从您的后台脚本调用的,对吗?它实际上确实 起作用,但它通过返回您在背景页面上选择的任何文本 来起作用。由于您通常无法与扩展程序的后台页面进行交互,因此这可能是一个空字符串。

关于javascript - 如何将选定的文本正确捕获到 Google Chrome 中的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144669/

相关文章:

javascript - 更新 Chrome 窗口时, "drawAttention"实际上做了什么?

javascript - Node.js:读取被覆盖的图片,仅引用初始图像

javascript - 将 JS 和 jQuery 重新制作成 AngularJS

javascript - xhr.upload.addEventListener 加载有空 xhr.responseText

html - 移动 chrome 上的 wow.js 动画仅在停止滚动时触发

html - CSS 背景不适用于 Chrome

javascript - 使用 javascript 和 getElementsByClassName 检索显示属性

JavaScript整数数学不正确的结果

javascript - 如何更改 Chrome 扩展中的事件标签网址

javascript - 获取 chrome 中所有打开的标签页的 url,并将其发送到网络服务