Javascript 将变量从函数传递到函数中的函数

Javascript 将变量从函数传递到函数中的函数,javascript,function,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Function,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我正在尝试创建一个chrome扩展,它通过上下文菜单获取所选文本,将其附加到url,并用新url更新现有选项卡(来自同一域)。 这是我的代码: function soso(search_target){ alert(search_target); //search_target gets here successfully chrome.tabs.query({ url: "https://lightning.force.com/lightning/*

我正在尝试创建一个chrome扩展,它通过上下文菜单获取所选文本,将其附加到url,并用新url更新现有选项卡(来自同一域)。 这是我的代码:

function soso(search_target){
    alert(search_target);
    //search_target gets here successfully 

    chrome.tabs.query({
        url: "https://lightning.force.com/lightning/*"},
        function(tabs, search_target){

        if (tabs[0]){

            chrome.tabs.update(tabs[0].id, {
                url: "http://www.facebook.com"+search_target, //search_target doesnt get here
                active: true
            });
        }
        else{
            alert("no window");
        }
        });
}


function selectionHandler (info, tab)
{
        soso( info.selectionText);
}

function resetContextMenus ()
{
    chrome.contextMenus.removeAll(
    function()
    {
            var id = chrome.contextMenus.create( {
                title: "Open in Salesforce",
                contexts: [ "selection" ],
            onclick: selectionHandler
        } );
    }
    );
}
resetContextMenus();
问题是我无法将
search\u target
传递到
chrome.tabs.update
,我会在URL后面得到一个
未定义的


关于如何传递这个变量有什么想法吗?

让我们回顾一下我们的分析:

  • 您尝试调用
    chrome.tabs.update
    ,传递
    search\u target
  • 在具有
    搜索目标
    参数的回调函数中
  • 该函数由chrome.tabs.query调用
  • 而不是通过您的外部
    功能
  • 但是您在外部上下文中有一个有效的
    搜索\u目标
  • 无法从回调
    函数的块中访问,因为未定义的具有类似名称的参数会将其隐藏
解决方案:删除该参数以允许在回调函数中知道外部上下文的变量

function soso(search_target){
    alert(search_target);
    //search_target gets here successfully 

    chrome.tabs.query({
        url: "https://lightning.force.com/lightning/*"},
        function(tabs){

        if (tabs[0]){

            chrome.tabs.update(tabs[0].id, {
                url: "http://www.facebook.com"+search_target, //search_target doesnt get here
                active: true
            });
        }
        else{
            alert("no window");
        }
        });
}


function selectionHandler (info, tab)
{
        soso( info.selectionText);
}

function resetContextMenus ()
{
    chrome.contextMenus.removeAll(
    function()
    {
            var id = chrome.contextMenus.create( {
                title: "Open in Salesforce",
                contexts: [ "selection" ],
            onclick: selectionHandler
        } );
    }
    );
}
resetContextMenus();

尝试创建另一个变量并将数据附加到新变量,然后尝试将新附加的变量传递到url值