我正在构建Chrome扩展程序。我有这个函数,它作为上下文菜单的回调触发点击:
background.js
function setTranslation(info, tab) {
var parseWord = 'var word = ' + info.selectionText;
alert(parseWord); // works here
chrome.tabs.executeScript(tab.id, {
code: parseWord
}, function () {
chrome.tabs.executeScript(tab.id, {
file: 'lightbox.js'
});
});
现在,lightbox.js仅提醒传递的值:
lightbox.js
alert(word);
我试图找到一种方法将选择的值(info.selectionText
)传递给内容脚本(lightbox.js
)。当code
中的background.js
属性值为简单字符串时,它可以正常工作。但是,当我将其与info.selectionText
的值连接时,它会提醒undefined
。
这是因为动作的异步吗? 有没有办法让它与调整一起工作,还是我必须使用消息传递?
答案 0 :(得分:1)
假设info.selectionText为abc
,请查看注入的代码:var word = abc
。现在你可以看到abc
这里不是一个字符串,而是一个未定义的变量名!
强大的解决方案是使用JSON.stringify来逃避嵌入式引号并在字符串周围添加双引号:
var parseWord = 'var word = ' + JSON.stringify(info.selectionText);