У меня есть расширение Chrome, которое загружает сообщения Facebook на компьютер.После последнего обновления Chrome (v.74) он перестал работать.
Я создал тестовое расширение, которое поможет вам понять, что произошло.Поэтому вы можете скачать его здесь: тестовое расширение или создать его с нуля, используя приведенный ниже код.
manifest.json
{"name": "TEST",
"description": "TEST CHROME 74 BROKEN RESPONSE HEADERS",
"version": "1.0",
"manifest_version": 2,
"permissions": [
"https://*.facebook.com/",
"activeTab",
"cookies",
"contextMenus",
"tabs",
"webRequest",
"webRequestBlocking",
"storage",
"https://connect.facebook.net/en_US/all.js"
],
"web_accessible_resources": [
],
"background": {
"scripts": [ "background.js" ]
},
"browser_action": {
"default_popup": "popup.html"
}}
background.js
chrome.webRequest.onBeforeRequest.addListener(
function(details)
{
if ((details.url.indexOf('https://www.facebook.com/api/graphql/') !== -1 ||
details.url.indexOf('https://www.messenger.com/api/graphql/') !== -1 ||
details.url.indexOf('https://www.facebook.com/api/graphqlbatch/') !== -1 ||
details.url.indexOf('https://www.messenger.com/api/graphqlbatch/') !== -1)
&& (details.requestBody.raw || details.requestBody.formData)) {
var match;
if (details.requestBody.raw) {
var decoded = decodeURIComponent(new TextDecoder('utf-8').decode(details.requestBody.raw[0].bytes));
match = decoded.match(/"(threadFBID|messageThreadID)":"(\d+?)"/);
}
if (details.requestBody.formData) {
match = details.requestBody.formData.variables[0].match(/"(threadFBID|messageThreadID)":"(\d+?)"/);
}
if (match) {
chrome.storage.local.set({ 'chatID': match[2] }, function(){
chrome.tabs.query({active: true}, function(tabs) {
chrome.tabs.executeScript(tabs[0].id, {file: "js/jquery-3.1.1.min.js"}, function(){
chrome.tabs.executeScript(tabs[0].id, { file: "js/dateOptions.js" }, function() {
});
});
});
});
}
}
},
{urls: ["https://www.facebook.com/*", "https://www.messenger.com/*"]},
['requestBody']);
dateOptions.js
var load_data = function(token, id) {
var url = 'https://www.facebook.com/api/graphqlbatch/';
var docId = '1699057486820841';
var dataString = '__user=' + id + '&__a=1&fb_dtsg=' + token;
dataString +=
'&queries=%7B%22'
+ 'o0' + '%22%3A%7B%22'
+ 'doc_id' + '%22%3A%22' + docId + '%22%2C%22'
+ 'query_params' + '%22%3A%7B%22'
+ 'limit' + '%22%3A' + 50 + '%2C%22'
+ 'before%22%3A' + null + '%2C%22'
+ 'tags%22%3A%5B%22' + 'INBOX' + '%22%5D%7D%7D%7D';
$.ajax({
type: 'POST',
url: url,
data: dataString,
dataType: "json",
success: function(data){
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
chrome.storage.local.set({
'data': XMLHttpRequest.responseText
});
}
}); };
var set_id_and_token = function(cb) {
var scr = document.querySelectorAll("script");
var myIdSet = false, tokenSet = false;
// set FB token and owner's id
for (var i = 0; i < scr.length; i++) {
var token = scr[i].textContent.match(/\"token\"\:\"(.*?)\"/);
if (token) {
token = token[1];
tokenSet = true;
}
var id = scr[i].textContent.match(/\"USER_ID\"\:\"(.*?)\"/);
if (id) {
id = id[1];
myIdSet = true;
}
if (myIdSet && tokenSet) break;
}
cb(token, id);
}
chrome.storage.local.get(null, function(items) {
set_id_and_token(function(token, id){
load_data(token, id);
}); });
Вам также понадобится jquery-3.1.1.min.js файл для запуска AJAX-запросов.
Итак, шаги для воспроизведения проблемы:
1. Добавьте тестовое расширение в браузер Chrome.
2. Перейдите на https://www.facebook.com/messages/t/ (вы должны войти в систему, конечно)
3. Выберите любой чат в папке «Входящие».
4. Откройте всплывающее окно расширения.
Теперь в зависимости от версии Chrome вы будетеполучить один из двух выходов.
Если у вас версия 74 и выше:
Если у вас версия до 74:
То есть до последнего обновления расширение могло получать необходимую информацию с серверов Facebook.
То, что я нашел до сих пор.
Я просмотрел запросы, отправленные расширением для этих двух разных версий Chrome, и обнаружил следующие различия:
В заголовках запросов - разница в происхождении
Версия 74+:
Версия ниже 74:
В заголовках ответа - разница в заголовках контроля доступа и CSP
Версия 74 +:
Версия ниже 74:
Если кто-то может поделиться своими идеями о том, как это можно исправить, я буду благодарен.