如何从 Chrome 扩展程序发送 HTTP GET 请求?

Posted

技术标签:

【中文标题】如何从 Chrome 扩展程序发送 HTTP GET 请求?【英文标题】:How do I send an HTTP GET request from a Chrome extension? 【发布时间】:2014-09-26 06:47:35 【问题描述】:

我正在开发一个使用 GET 方法发送 HTTP 请求的 chrome 扩展。

如何使用参数par 和值0www.example.com 发送GET?

https://www.example.com?par=0

(服务器读取参数par并做一些事情)

我找到这篇文章,谈论Cross-Origin XMLHttpRequest,但我不知道他们的例子对我有什么帮助。

【问题讨论】:

【参考方案1】:

首先,您需要编辑您的manifest.json 并添加www.example.com 的权限:

对于新的Manifest V3,使用host_permissions 字段:


    "manifest_version": 3,
    ...
    "host_permissions": [
        "https://www.example.com/*"
    ],
    ...

如果您仍在使用旧版 Manifest V2,请使用 permissions 字段:


    "manifest_version": 2,
    ...
    "permissions": [
        "https://www.example.com/*"
    ],
    ...

然后在你的后台页面(或其他地方)你可以这样做:

fetch('http://www.example.com?par=0').then(r => r.text()).then(result => 
    // Result now contains the response text, do what you want...
)

另见MDN doc for fetch()


使用XMLHttpRequest (ES5) 的弃用版本:

function callback() 
    if (xhr.readyState === XMLHttpRequest.DONE) 
        if (xhr.status === 200) 
            result = xhr.responseText;
            // ...
        
    
;

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.example.com?par=0", true);
xhr.onreadystatechange = callback;
xhr.send();

注意相对documentation page顶部的警告:

在 Manifest V3 中,后台页面不支持 XMLHttpRequest(由 Service Worker 提供)。请考虑使用它的现代替代品fetch()

【讨论】:

请注意:如果您在 https 页面上并且正在请求 http URL,则可能会收到 Mixed Content: The page at '...' 错误。 我可以添加模式而不是特定域吗? 可以,使用 * 通配符。但是,如果您想允许通过 https 和 http 进行访问,则必须单独添加。阅读developer.chrome.com/extensions/xhr ***.com/questions/34627921/…, ***.com/questions/11506687/… 尝试从我的内容脚本调用fetch 时遇到CORB 错误(将外部URL 添加到permissions 数组并不能解决问题)。以下答案解决了我的问题,即将 fetch 调用委托给后台脚本,并按照最初的预期将解析响应发送回内容脚本。 ***.com/questions/55214828/…

以上是关于如何从 Chrome 扩展程序发送 HTTP GET 请求?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展如何将数据从内容脚本发送到 popup.html

如何在 chrome 扩展本机消息传递和 c# 应用程序之间发送/接收消息

尝试将数组从内容脚本发送到弹出脚本的 Chrome 扩展程序错误

使用 cookie 从 Chrome 扩展发送 XHR 请求

chrome插件开发怎么发送请求

如何从 Firefox 或 Chrome 浏览器手动发送 HTTP POST 请求