javascript - 将变量从函数传递到函数内的函数
问题描述
我正在尝试创建一个 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
,我undefined
在 URL 之后得到一个。
关于如何传递这个变量的任何想法?
解决方案
让我们回顾一下我们的分析:
- 你试着打电话
chrome.tabs.update
,通过search_target
function
在具有search_target
参数的回调中- 该函数由
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();
推荐阅读
- nginx - Nginx添加新站点的子域无效
- vuejs2 - Laravel API 调用在生产中失败
- liquibase - Payara DataSource 没有被注入
- web-scraping - XPATH如何通过选择类来获取attr
- python - cmd.stdin.flush() IOError: [Errno 22] 无效参数
- c++ - 尝试从“C++ Concurrency in Action”(第 133 页)一书中用原子理解代码示例
- node.js - 使用 glob.sync() 忽略包含给定子字符串的文件
- ios - 如何在 if-else 条件语句中使用 AlertController
- node.js - 如何修复未处理的拒绝 SequelizeConnectionError:未选择数据库
- python - python列表问题,我应该使用哪个函数?