# ext-xhr-proxy **Repository Path**: boboanzuiniubi/ext-xhr-proxy ## Basic Information - **Project Name**: ext-xhr-proxy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-09 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ext-xhr-proxy 通过改写xhr对象让extention发起请求获取跨域资源,现在只能chrome用 项目是webpack构建的 ```npm run build``` 或者 ```yarn build``` 打包成浏览器可加载的文件 ## 这个拓展都做了什么? 在 background.js 里发送的请求是不会跨域的 加载了拓展插件,会有一段个 content_script 的 script 注入到你的页面(content_script 与网站的js是隔离开的,他们共享的只有document,他相对安全),这个 script 中包含一些 chrome 浏览器的 api,content_script 在这里利用浏览器的消息 api 作为网站与 background 间的消息接口。 content_script 还有一个另外的作用,是他用 document 注入了一个 script 标签(这里称为 inject_script ),注入的 inject_script 并没有与网站隔离,它可以访问你任何变量,这个项目就修改了 XMLHttpRequest 构造函数,使他返回一个 xhr 的代理,使所有对于xhr对象的操作(open/send...)都被 xhrProxy 拦截到了,实现了 ajax 劫持 当 xhrProxy 对象拦截到需要被代理的请求时,会通过 postMessage 向 content_script 发送消息 content_script 则会把消息转发到 background.js 在 background 中创建一个 xhr 对象发送真正的请求。在 response 后,再通过 content_script 原路返回 postMessage 到活动页面上 更新 xhrProxy 的状态实现代理请求 ## 关于请求的blob 现在是把blob转成sendmessage能发送的base64字符串,这样处理大文件的时候肯定会很慢,但是并没有找到很好的方法把文件从拓展中运到页面来。