gpt4 book ai didi

javascript - 如何删除 CORB 警告?

转载 作者:行者123 更新时间:2023-11-29 10:27:30 24 4
gpt4 key购买 nike

Chrome 一直工作到版本 73。现在它向我抛出 CORB 警告并阻止我的 chrome 扩展程序运行。

这是我的 ajax jquery 代码,没什么特别的

  $.ajax({
url: this.url + "api/users",
type: 'get',
data: { account_id: this.account_id(), user_id: this.user_id(), person_id: person_id },
success: function (data) {
//do stuff
}
});

我确实注意到,如果我删除 x-content-type-options header ,使其不再显示为“nosniff”,我可以获得一些要返回的 Ajax 请求,但不会返回其他请求。不确定这是否意味着什么,但我注意到返回数组的 json 请求有效,但其他请求无效。

remove_keys = %w(X-Content-Type-Options)
response.headers.delete_if{|key| remove_keys.include? key}

[{'id' : '123'}] <-worked
{'id' : '123'} <- did not work (not sure if means anything)

chrome 的完整错误

Cross-Origin Read Blocking (CORB) blocked cross-origin response https://ideas.test/api/users?token=W9BDdoiKcXLWSHXWySnwdCV69jz2y&account_id=3098355&user_id=john%40gmail.com&person_id=21046915&sync=false&new=true with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.

响应头

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: x-auth_token
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD
Access-Control-Allow-Origin: chrome-extension://mhikhjencpecbhelhjgdcgpdhlhdlhjh
Access-Control-Expose-Headers:
Access-Control-Max-Age: 1728000

请求 header

Provisional headers are shown
Accept: */*
Origin: chrome-extension://mhikhjencpecbhelhjgdcgpdhlhdlhjh
Referer: https://3.basecamp.com/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36

由于 CORB,我怎样才能得到返回的响应主体而不用 chrome 移除响应主体?

最佳答案

我找到了解决方法。对某些人来说可能有点矫枉过正,但我​​花了 15 分钟来修复所有问题。在您的内容脚本中将所有 ajax 调用包装到一个函数中:

将 ajaxGet 函数添加到您的内容脚本:

function ajaxGet(data){
return new Promise(function (resolve, reject) {
chrome.runtime.sendMessage({action: 'ajaxGet', data: data}, function (response) {
console.log(response)
if(response&&!response.statusText){//Might need some work here
resolve(response);
} else {
reject(response)
}
});
});
}

然后在你的 background.js 中添加一个监听器:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(request.action=="ajaxGet"){
$.ajax(request.data).then(sendResponse,sendResponse)
return true //telling chrome to wait till your ajax call resolves
}
})

代替

$.ajax({
url: this.url + "api/user_boards",
type: 'get',
data: { account_id: this.account_id()}
})

打电话

ajaxGet({
url: this.url + "api/user_boards",
type: 'get',
data: { account_id: this.account_id()}
}).then(onSuccess, onError) //handle response from here

如果您不想在 background.js 中使用 jquery,您可以改为调用 Xhr。像这样:

var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
sendResponse(this.responseText)
} else {
//handle errors
}
});

xhr.open("GET", request.data.url);

xhr.send(data);

您必须自己解决 header 问题。

关于javascript - 如何删除 CORB 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55153960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com