Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将info.selectionText的值传递给内容脚本_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

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

Javascript 将info.selectionText的值传递给内容脚本,javascript,google-chrome,google-chrome-extension,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

我正在构建一个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'
        });
    });
alert(word);
lightbox.js目前只会提醒传递的值:

lightbox.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'
        });
    });
alert(word);
我正在试图找到一种方法,将选择的值(
info.selectionText
)传递给内容脚本(
lightbox.js
)。当
background.js
中的
code
属性的值是一个简单的字符串时,它就会工作。但当我将其与
info.selectionText
的值连接时,它会提醒
undefined

这是因为动作的异步性吗?
有没有一种方法可以通过调整使其工作,或者我必须使用消息传递?

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

健壮的解决方案是使用JSON.stringify,它将转义嵌入的引号并在字符串周围添加双引号:

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