Google Chrome 扩展程序中的同步调用

2023-11-25

我正在开发 Google Chrome 扩展程序,它必须阻止/重定向一些传出请求。为此,我使用chrome.webRequest.onBeforeRequest听众。 为了决定是否阻止请求,我需要一些有关选项卡请求发送来源的信息。我可以使用它chrome.tabs.get(integer tabId, function callback),但是回调是异步的,这意味着它可以在返回值之后调用onBeforeRequest听众。

chrome.webRequest.onBeforeRequest.addListener(function(details){
 chrome.tabs.get(details.tabId, function(tab){
  // get info from tab
 }); 
 // based on info from tab return redirect or not
}), {
 urls: ["<all_urls>"],
 types: ["main_frame"]
}, ["blocking"]);

有没有办法同步调用?或者也许还有其他选择。


Stack Overflow 上的另一个答案建议跟踪选项卡outside你的监听器函数,这完全避免了这个问题。

示例代码:

/* 
 * --------------------------------------------------
 * Keep list of tabs outside of request callback
 * --------------------------------------------------
 */
var tabs = {};

// Get all existing tabs
chrome.tabs.query({}, function(results) {
    results.forEach(function(tab) {
        tabs[tab.id] = tab;
    });
});

// Create tab event listeners
function onUpdatedListener(tabId, changeInfo, tab) {
    tabs[tab.id] = tab;
}
function onRemovedListener(tabId) {
    delete tabs[tabId];
}

// Subscribe to tab events
chrome.tabs.onUpdated.addListener(onUpdatedListener);
chrome.tabs.onRemoved.addListener(onRemovedListener);

/* 
 * --------------------------------------------------
 * Request callback
 * --------------------------------------------------
 */
// Create request event listener
function onBeforeRequestListener(details) {
    // *** Remember that tabId can be set to -1 ***
    var tab = tabs[details.tabId];

    // Respond to tab information
}

// Subscribe to request event
chrome.webRequest.onBeforeRequest.addListener(onBeforeRequestListener, {
    urls: ["<all_urls>"],
    types: ["main_frame"]
}, ["blocking"]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Chrome 扩展程序中的同步调用 的相关文章

  • model.save() 返回无效输出

    我正在使用本文中的 Node js mongodb 和express 对 REST Api 进行简单测试 MERN 第一部分 使用 Node js 和 Express 构建 RESTful API https medium com week
  • Chrome 模拟设备的 OnePlus 3 和 OnePlus 5 视口尺寸

    我想将 OnePlus 3 和 OnePlus 5 作为自定义设备添加到 Google Chrome 的模拟设备列表中 请提供视口大小 以便我可以用它来测试我的网站 像素 2 显示尺寸示例 提前致谢 我正在寻找同样的东西 我发现了这个 ht
  • 为什么这个 JavaScript 可以在 Safari 上运行,但不能在 Firefox 上运行?

    我有 HTML 文件 我在 Safari 上尝试了该代码 运行良好 但是当我在 Firefox 上尝试这个时 它不起作用 任何人都可以建议如何使其在 Firefox 上工作吗 单击撤消按钮时 我想从 jsp 文件中检索内容 当我在 mac
  • 从一个页面导航到另一个页面时,JavaScript 不会执行

    我正在构建我的第一个 Ruby on Rails 应用程序 并尝试创建一个动画导航栏 我正在使用 jQuery 和 Turbolink 这是我的application js under app assets javascripts docu
  • jQuery show() 和 hide() 的更流畅替代方案

    我有一个带有隐藏列的页面设置 使用 jQuery show 和 hide 函数将列滑入和滑出 然而 它有点 笨重 并且在显示 隐藏时看起来不太流畅 相比之下 我还有一个使用 jquery UI 手风琴的页面部分 当在这些部分之间切换时 过渡
  • Chrome 中的 OpenType 设置由字体粗细和字体样式重置

    我在用Raleway https fonts google com specimen Raleway来自 Google Fonts 作为我项目的主要字体 一切都很好 直到我注意到数字以 旧式 模式显示 这意味着某些数字具有从字体基线向上或向
  • 克隆元素对应表单中所有元素的事件

    我成功克隆了表行 其中包含从数据库检索的值 不过我对它没有什么问题 我对所有元素使用了类 因为克隆会重复 ID 不会出现问题 因为它无法唯一地定位每个元素 使每个元素 行在这里唯一的方法是什么 功能如何工作 当第一次选择框时 所选 ID 的
  • 如何在html中创建字体选择栏

    我想创建一个下拉菜单 在其中我们可以看到所有可用的字体 并且可以选择我们选择的任何字体 我还想创建一个字体颜色选择小部件 存在大量的字体样式 我想知道如何获取所有这些字体以及如何创建一个小部件 用户可以使用该小部件选择他选择的颜色 为了创建
  • 在 Angular JS 中撤消重做

    我有一个大对象排列在 rootScope 中 比如说 gt 100 个对象 每个对象又具有对象 数组的层次结构 我想使用 deepWatching watch 整个 rootScope 即将 watch 的第三个参数设置为 TRUE 但这里
  • 我可以阻止history.popstate在初始页面加载时触发吗?

    我正在开发一个通过 AJAX 提供内容的网站 如果您单击菜单中的某个项目 内容 div 会更新为 get回应 没什么花哨的 我正在实施history pushState允许使用浏览器的后退 前进按钮进行导航 我有以下内容可以在历史导航上加载
  • 为什么 html 中的 AngularJS 错误没有显示在控制台中?

    Here s a fiddle http jsfiddle net 6y7odxmj 3 用于说明 当 ng click 指令 例如 调用未在控制器的 scope 或其父级 上定义的函数时 它会默默地失败 当我尝试调试网页时 这种行为令人抓
  • Javascript for 循环跳过最后一个元素

    我有一个数组 根据某些条件从中删除某些元素 当我删除元素时 我会重新启动 for 循环 因为索引已刷新 var k for k 0 k lt this j data length k if condition true this j dat
  • 验证动态添加的输入字段

    我用过this http docs jquery com Plugins Validation以下表单的 jquery 验证插件
  • 特别更改画布上的笔画不透明度,但不更改颜色

    我有一个漂亮整洁的脚本 可以循环显示颜色 并且与 xxxxxx格式 但我想改变透明度 有没有办法做到这一点 我指的是ctx strokeStyle 这是当前的代码 canvas strokeStyle 16777215 s length i
  • javascript 函数后面括号中的值

    我正在尝试重新利用我在 SO 的答案中找到的一些 Javascript 代码 但我想首先更好地理解它的语法 其大纲是 function root ns factory some code window detectZoom function
  • 谷歌绘制具有相同比例的多个系列的图表

    我正在寻找一种在图形上显示多个系列的方法 这些系列具有相同的比例但仅显示一次 正如你在这里看到的 http jsfiddle net Youkoal d3xwnqdu http jsfiddle net Youkoal d3xwnqdu 我
  • Electron 应用程序中的 NEDB 持久化

    我正在尝试从电子应用程序连接到 nedb CRUD 操作效果很好 但我没有看到 db 文件 D my db 检查隐藏文件 文件存在于某个地方 因为即使在机器重新启动后它也会保留数据 我怀疑电子威胁着我的相对路径 但我可以在任何地方找到它 v
  • 如何在输入时格式化 contenteditable div?

    我正在尝试编写一个函数 允许 contenteditable div 在用户输入 div 时执行一些自动格式化 到目前为止我只能让它在 IE 中运行 有人可以帮助我吗 function formatOnKeyUp if window get
  • 表单帖子上的 asp.net mvc 编码

    我在我的 asp net mvc 表单 带有文本区域的 nicedit 中使用富文本编辑器 当我在帖子上提交表单时 因为它不是 html 编码的 我收到以下消息 从客户端检测到潜在危险的 Request Form 值 如何对 post 上的
  • Fancybox修改。如何修改 fancybox 以停止在每个画廊的最后一项? (画廊 1 画廊 2 等)[重复]

    这个问题在这里已经有答案了 我正在为我的照片库使用 fancybox 插件 我有多个包含更多项目 照片 的画廊 我想知道如何在点击每个画廊的最后一个项目时停止幻灯片放映 我的 fancybox js 没有被修改 谢谢 您需要添加该选项loo

随机推荐

  • Java 中私有静态嵌套类内的访问修饰符

    我在 Java 中有一个 私有静态 嵌套类 此类中的字段和方法的访问修饰符有何意义 我已经尝试过公共和私人 对我的申请没有影响 public class MyList
  • 删除域后的尾部斜杠

    这是我的 htaccess file
  • LINQ 的通配符搜索

    我想知道是否可以使用 LINQ 进行通配符搜索 我看到 LINQ 有 Contains StartsWith EndsWith 等 如果我想要 Test if it work 之类的东西怎么办 Regards 您可以使用SqlMethods
  • 在服务器上部署一段时间后无法连接数据库

    我将我的战争文件上传到我的服务器上 它在部署后完美运行 但一段时间后它显示异常 我正在使用 struts2 和 hibernate my hibernate cfg xml is
  • GLFW 3 已初始化,但还没有?

    我正在努力使用 GLFW 3 函数 glfwCreateWindow 创建窗口 我设置了一个错误回调函数 它几乎只是打印出错误号和描述 并且根据 GLFW 库尚未初始化 即使 glfwInit 函数刚刚返回成功 这是我的代码的摘录 Erro
  • ImageView 上的边框半径和阴影

    我想在 JavaFX 中应用边框半径和阴影 在 CSS3 中它将是 box shadow rgba 0 0 0 0 8 0 0 10px border radius 3px 现在我想在 JavaFX 中实现这一点 但即使是 border r
  • 必须使用mockbean而不是自动装配

    我用的是弹簧靴2 我创建了一个基本测试 RunWith SpringJUnit4ClassRunner class public class VehicleServiceImplTest private VehiculeServiceImp
  • 了解 ARKit 中的坐标空间

    我已阅读所有有关的 Apple 指南ARKit 并观看了一个全球开发者大会视频 但我不明白坐标系如何绑定到 一个真实的世界 A device 3D 场景 相互连接 我可以添加一个对象 例如SCNPlane let stripe SCNPla
  • VBA 中的公共对象模块是什么?

    我试图在 VBA 中尽可能接近函数指针 抽象类 我有一堂课叫VerificationManager并验证几个电子表格中的一堆单元格是否匹配 根据所使用的信息和电子表格 这将以不同的方式完成 我希望能够通过使用以下命令在字符串中指定要调用的方
  • 如何从 YouTube 获取频道 ID?

    我正在尝试使用以下方法从我的频道检索数据YouTube 数据 API V3 为此 我需要我的频道 ID 我尝试从我的 YouTube 帐户中找到我的频道 ID 但各种方法都失败了 如果有人给我一个建议 我会非常高兴 这是我用来检索数据的 U
  • $是什么? Powershell 中的别名?

    今天向我展示的脚本中有这样一行 If do some stuff 我从来没有见过美元符号问号别名 之前我无法通过谷歌确定它的用途 当我在 powershell 窗口中执行它时 它通常返回 True 但偶尔返回 False 我的测试似乎表明
  • CMake:包含目录的排序(如何混合基于系统和用户的包含路径?)

    我有一个 CMake 项目 其中包含并链接两个库 例如A and B 实际上它不止两个 其中之一是增强的东西 但这在这里并不重要 两者都位于通过FindSomething cmake 正确 填充标准 CMake 变量的脚本 例如通过添加包含
  • 使用 PHP 客户端库将大文件上传到 google 驱动器

    我正在尝试通过他们的 PHP 客户端库使用 Google Drive API 上传大文件 目前它失败了 因为似乎唯一可用的方法是 简单 上传方法 不幸的是 这需要您将整个文件作为数据加载 并且它达到了我的 php 内存限制 我想知道是否可能
  • 动态转换为 void 指针有实际用途吗?

    在 C 中 T q dynamic cast
  • cmake配置时出错

    抱歉 如果这不是发布此内容的正确位置 但我认为 librocket 论坛早已消亡 我有 Ubuntu 12 04 我按照构建 librocket 的步骤进行操作here 我按照步骤所述使用 cmake 但当我按 c 来配置时出现此错误 CM
  • ion-content 和 ion-footer 有不同的 $scope

    我的 ion content 中有两个输入字段 它们都附加了一个 ng model 然后在我的 ion footer 中 我有一个 ng click 我在其中调用一个函数并传入两个 ng model 当我在 ion content 中进行
  • 反向代理背后的 Springfox Swagger UI

    我已经使用 Swagger API 文档配置了 Spring Boot 应用程序并配置了 Swagger UI 我还在反向代理后面运行后端应用程序 该代理映射来自的所有请求host port api to backend host port
  • 如何在 ASP.NET 中运行后台任务 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要运行一些任务Asp net MVC 每 5 分钟后 我从来没有研究过这样的功能 所以我用谷歌搜索并找到了一些实现此功能的选项 这些是选项here here and here 我已经查
  • Monotouch 中的子类化和重写 UITextField

    我正在尝试将 UITextField 的占位符文本设置为不同的颜色 我了解到我需要子类化并重写 drawPlaceholderInRect 方法 iPhone UITextField 更改占位符文本颜色 void drawPlacehold
  • Google Chrome 扩展程序中的同步调用

    我正在开发 Google Chrome 扩展程序 它必须阻止 重定向一些传出请求 为此 我使用chrome webRequest onBeforeRequest听众 为了决定是否阻止请求 我需要一些有关选项卡请求发送来源的信息 我可以使用它