将变量从函数传递到函数内的函数
Passing variable from a function to a function within a function
我正在尝试创建一个 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_target
传递给 chrome.tabs.update
,我在 URL 之后得到一个 undefined
。
关于如何传递这个变量有什么想法吗?
让我们回顾一下我们的分析:
- 您尝试调用
chrome.tabs.update
,传递 search_target
- 在具有
search_target
参数的回调 function
中
- 函数被
chrome.tabs.query
调用
- 而不是你的外层
function
- 但是你在外部上下文中有一个有效的
search_target
- 无法从回调块访问
function
因为具有相似名称但未定义的参数隐藏了它
解决方案:删除参数以允许在回调中知道外部上下文的变量function
:
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();
我正在尝试创建一个 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_target
传递给 chrome.tabs.update
,我在 URL 之后得到一个 undefined
。
关于如何传递这个变量有什么想法吗?
让我们回顾一下我们的分析:
- 您尝试调用
chrome.tabs.update
,传递search_target
- 在具有
search_target
参数的回调function
中 - 函数被
chrome.tabs.query
调用
- 而不是你的外层
function
- 但是你在外部上下文中有一个有效的
search_target
- 无法从回调块访问
function
因为具有相似名称但未定义的参数隐藏了它
解决方案:删除参数以允许在回调中知道外部上下文的变量function
:
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();