首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Chrome扩展开发,跨域请求API

Chrome扩展开发,跨域请求API

作者头像
imba久期
发布于 2022-09-23 12:40:15
发布于 2022-09-23 12:40:15
3.3K00
代码可运行
举报
运行总次数:0
代码可运行

这次问题是从Btools更换获取数据方式开始的,因为B站收藏夹在前台页面返回的数据中删除了失效视频的封面和标题,导致原来的程序无法获取视频信息。

于是我就想如果请求收藏夹的API,是否可以获取这些信息。但打开后发现,这些数据是从请求API的时候就被删除或者说被过滤掉了。

可以看到title是“已失效视频”,cover是失效视频的封面。

查看API后发现,intro(视频简介)、pages(分P信息)以及link(打开客户端的链接,有av号),这些信息还存在,即使获取不到封面标题,这种方式还是有必要添加到插件的。

Btools的查看失效视频功能失效了,改为增强B站收藏夹功能,让你依然可以通过收藏视频的详情来回忆起失效视频是啥(我怀疑反应的人多了,B站早晚还会放出封面和标题的)。

而且能获取到av号,也可以直接跳转到哔哩哔哩唧唧查看是否有缓存资源之类的。

虽然想法是好的,但实施起来还是会有问题,困扰了好几天的就是:跨域请求。因为插件是独立运行在浏览器中的,所以请求B站的API属于跨域请求(大概吧)。

虽然请求成功了,但返回数据是空。

试了好多方法都不行,最开始是去搜错误,方法挨个试。之后我以为是请求方式的问题,询问了插件大佬,把ajax换成fetch,各种乱试headers之类的参数,结果还是不行。

一连几天没有任何效果,然后又细致的研究了一下插件开发的官方文档,终于找到了方法。用插件的API发送请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// background.js
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
      if (request.type == 'fetch') {
        // WARNING: SECURITY PROBLEM - a malicious webpage may abuse
        // the message handler to get access to arbitrary cross-origin
        // resources.
        fetch(request.url)
            .then(response => response.text())
            .then(text => sendResponse(text))
            .catch(error => ...)
        return true;  // Will respond asynchronously.
      }
    });
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 需要发送请求的地方
chrome.runtime.sendMessage(
  {
    // 里面的值应该可以自定义,用于判断哪个请求之类的
    type: 'fetch',
    url: url // 需要请求的url
  },
  response => JSON.parse(response.text()));

就这样,经不shit♂的努力,跨域请求数据失败的问题就解决了。错误的根本原因还是对插件开发文档的不熟悉导致,基本没怎么看过文档,也没怎么用过插件的API。(其实也没有努力,我主要是想发出哲♂学的声音)

具体的技术错误在发送请求的位置,下面附上插件各个文件的权限。

JS种类

跨域

injected script

content script

popup js

background js

devtools js

我之前是直接在content script发送的请求,所以提示跨域问题,至于以前为什么有段时间是正常的,目前还不太清楚。现在改为先在background js中添加监听函数,然后在content script中用插件API的chrome.runtime.sendMessage进行通信,此时background js中的chrome.runtime.onMessage.addListener监听函数就会监听到,根据type参数是否等于“fetch”来判断让background js去发送请求,成功后返回请求内容。

之后还是会像这样边做边发现问题边学吧,虽然可能找问题解决方案会很花时间。(话说那大概是插件开发的基础吧,不要喷我 233

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 imba久期 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
定时任务@Scheduled 和 异步@Async
@EnableScheduling 开启定时任务功能,方法所在类需要加@Component @Scheduled(Cron= “”) 指定执行的时间
鱼找水需要时间
2023/02/16
6090
java之Spring 框架实战: TaskExecutor
使用 ThreadPoolTaskExecutor 可以实现一个 TaskExecutor.
IT工作者
2022/07/04
5090
@Async 注解的使用
在 Spring 中,@Async 标注的方法,在执行的时候,是异步运行的,它运行在独立的线程中,程序不会被该方法所阻塞。
水货程序员
2018/11/13
5.6K0
Spring Boot(5) @Async异步线程池详解
在Spring4中,Spring中引入了一个新的注解@Async,这个注解让我们在使用Spring完成异步操作变得非常方便。
黄规速
2022/04/14
5.5K0
Spring Boot(5) @Async异步线程池详解
SpringBoot中Async异步方法和定时任务介绍
1.功能说明 Spring提供了Async注解来实现方法的异步调用。 即当调用Async标识的方法时,调用线程不会等待被调用方法执行完成即返回继续执行以下操作,而被调用的方法则会启动一个独立线程来执行此方法。 这种异步执行的方式通常用于处理接口中不需要返回给用户的数据处理。比如当注册的时候,只需要将用户信息返回用户,而关于信息的保存操作可以使用异步执行。 Spring提供了Scheduled注解来实现定时任务的功能。 在异步方法和定时任务功能中都是开发这自己定义需要执行的方法,然后交给Spring容器管理
代码改变世界-coding
2018/07/03
2.1K0
聊一聊非分布式任务调度@Scheduled
注意:cron表达式可分为6或7个占位符,但在spring自带的定时任务中,cron只支持6个参数,若使用7个参数就会报错
小熊学Java
2023/07/16
4440
聊一聊非分布式任务调度@Scheduled
补习系列(9)-springboot 定时器,你用对了吗
大多数的应用程序都离不开定时器,通常在程序启动时、运行期间会需要执行一些特殊的处理任务。
美码师
2019/01/23
8150
CMS-Spring Task定时任务
根据分布式事务的研究结果,订单服务需要定时扫描任务表向MQ发送任务。本节研究定时任务处理的方案,并实 现定时任务扫描任务表并向MQ发送消息。
cwl_java
2020/01/14
4250
通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载
最近的新项目和数据同步相关,有定时调度的需求。之前一直有使用过Quartz、XXL-Job、Easy Scheduler等调度框架,后来越发觉得这些框架太重量级了,于是想到了Spring内置的Scheduling模块。而原生的Scheduling模块只是内存态的调度模块,不支持任务的持久化或者配置(配置任务通过@Scheduled注解进行硬编码,不能抽离到类之外),因此考虑理解Scheduling模块的底层原理,并且基于此造一个简单的轮子,使之支持调度任务配置:通过配置文件或者JDBC数据源。
Throwable
2020/06/23
2.7K0
通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载
Spring @Scheduled 怎么使用才正确
Spring scheduled 默认为单线程,最近就发现生产上有某个服务实例不按时执行 task 任务,最后排查出使用了@Scheduled,发现一个任务执行12个小时,导致其他任务都在排队等待,没有在规定时间去抢占分布式锁。
BUG弄潮儿
2023/02/24
3.3K0
Spring @Scheduled 怎么使用才正确
重学SpringBoot系列之异步任务与定时任务
在 Spring Boot 入口类上配置 @EnableAsync 注解开启异步处理。 创建任务抽象类 AbstractTask,并分别配置三个任务方法 doTaskOne(),doTaskTwo(),doTaskThree()。
大忽悠爱学习
2021/12/07
1.5K0
重学SpringBoot系列之异步任务与定时任务
Spring6.x对调度和异步执行的注解支持
要启用 @Scheduled 和 @Async ,在 @Configuration 类(或者在启动类)添加 @EnableScheduling 和 @EnableAsync,如下:
JavaEdge
2023/11/24
2610
Spring 定时任务
本文参考自Spring官方文档 34. Task Execution and Scheduling。
乐百川
2022/05/05
1K0
Spring框架提供的异步执行能力
Spring Framework分别使用TaskExecutor和TaskScheduler接口提供异步执行和任务调度的抽象。Spring还具有支持线程池或在应用程序服务器环境中委托给CommonJ的接口的实现。最终,在公共接口背后使用这些实现抽象出了Java SE 5,Java SE 6和Java EE环境之间的差异。本节我们着重讲解@Async如何实现异步处理。
田维常
2019/07/20
1K0
Spring Boot 实现定时任务的 4 种方式
在SpringBoot项目中,我们可以很优雅的使用注解来实现定时任务,首先创建项目,导入依赖:
二哥聊运营工具
2021/12/17
6690
关于Spring中的@Async注解以及为什么不建议使用 - Java技术债务
Async 注解是 Java 8 中的一个注解,用于标识一个方法是异步执行的。当一个方法被标记为 Async 时,该方法将在一个新的线程中执行,并且可以立即返回一个 CompletableFuture 对象。使用 CompletableFuture 可以更轻松地管理异步计算的结果。下面是一个使用 Async 注解的示例代码:
Java技术债务
2024/06/21
3710
Java中定时任务的6种实现方式,你知道几种?
几乎在所有的项目中,定时任务的使用都是不可或缺的,如果使用不当甚至会造成资损。还记得多年前在做金融系统时,出款业务是通过定时任务对外打款,当时由于银行接口处理能力有限,外加定时任务使用不当,导致发出大量重复出款请求。还好在后面环节将交易卡在了系统内部,未发生资损。
程序新视界
2021/12/07
3K0
Java中定时任务的6种实现方式,你知道几种?
SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式
同步调用 程序按照代码顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行; 异步调用 顺序执行时,不等待异步调用的代码块返回结果就执行后面的程序。
知了一笑
2019/07/19
7720
Spring开启方法异步执行
@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(Async
Java技术栈
2018/03/30
1.4K0
Spring开启方法异步执行
SpringBoot学习笔记(十七:异步调用)
在实际开发中,有时候为了及时处理请求和进行响应,我们可能使用异步调用,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。异步调用的实现有很多,例如多线程、定时任务、消息队列等。
三分恶
2020/07/16
6180
推荐阅读
相关推荐
定时任务@Scheduled 和 异步@Async
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档