我试图通过点击谷歌浏览器扩展中的上下文操作来获取所选文本的html源代码(获取突出显示的文本本身并不是我想要的)。
以下背景脚本(咖啡源)尝试通过executeScript
和sendRequest
到达选择对象(作为中间步骤)。但是,selection
和response
是
未定义。为什么它会失败?正确的方法是什么?
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上的示例已被删除。
答案 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