从chrome扩展中的上下文菜单中获取所选文本的html源代码

时间:2014-04-06 07:18:06

标签: javascript google-chrome google-chrome-extension selection

我试图通过点击谷歌浏览器扩展中的上下文操作来获取所选文本的html源代码(获取突出显示的文本本身并不是我想要的)。

以下背景脚本(咖啡源)尝试通过executeScriptsendRequest到达选择对象(作为中间步骤)。但是,selectionresponse是 未定义。为什么它会失败?正确的方法是什么?

logSelectionViaExecuteScript= ->
  chrome.tabs.executeScript
    code: "window.getSelection().toString();" , (selection) ->
      console.log 
        name: 'logSelectionViaExecuteScript'
        selection: selection

logSelectionViaSendRequestThroughTabs= (tabId)->
  chrome.tabs.sendRequest tabId, {method: "getSelection"}, (response)->
    console.log 
      name: 'logSelectionViaSendRequestThroughTabs'
      tabId: tabId
      response: response

onClickAction= (info, tab)->
  console.log  info: info
  console.log  tab: tab 
  logSelectionViaSendRequestThroughTabs(tab.id)
  logSelectionViaExecuteScript()

chrome.contextMenus.create
  title:"Highlight '%s'"
  contexts: ["selection"]
  onclick: onClickAction

我知道某些功能已被弃用。但是,他们仍然应该按照我理解文档的方式工作。

修改

自问题解决以来,Github上的示例已被删除。

1 个答案:

答案 0 :(得分:0)

我误解了API描述。以下是它的工作原理:

在后台脚本中:

logSelectionViaSendMessageThroughTabs= (tabId)->
  chrome.tabs.sendMessage  tabId, {method: "getSelection"}, (response)->
    console.log 
      name: 'logSelectionViaSendMessageThroughTabs'
      tabId: tabId
      response: response

请注意sendMessage的使用,这是要使用的非弃用函数。

以下是内容脚本的摘录:

chrome.runtime.onMessage.addListener (message,sender,sendResponse)->
  if message.method is "getSelection" 
    selection= window.getSelection()
    # do something with selection and send it off with sendResponse