将info.selectionText的值传递给内容脚本

时间:2017-07-30 13:48:21

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

我正在构建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

这是因为动作的异步吗? 有没有办法让它与调整一起工作,还是我必须使用消息传递?

1 个答案:

答案 0 :(得分:1)

假设info.selectionText为abc,请查看注入的代码:var word = abc。现在你可以看到abc这里不是一个字符串,而是一个未定义的变量名!

强大的解决方案是使用JSON.stringify来逃避嵌入式引号并在字符串周围添加双引号:

var parseWord = 'var word = ' + JSON.stringify(info.selectionText);