У меня есть iframe в электронном приложении (v6.1.2), которое загружает внешний URL. Мне нужно загрузить этот URL с пользовательским заголовком, поэтому я использую webRequest.onBeforeSendHeaders()
, чтобы перехватить запросы и вставить этот заголовок. Как только я передаю requestHeaders
параметру обратного вызова, файлы cookie в iframe перестают работать.
в main.js
:
import { remote } from 'electron'
// the constant MY_URL used below contains the extarnal URL
const webRequest = remote.getCurrentWindow().webContents.session.webRequest;
webRequest.onBeforeSendHeaders(
{
urls: [`${MY_URL}*`]
},
(details, callback) => {
// I need to clone details.headers, as simply setting
// details.headers['X-MY-CUSTOM-HEADER']
// won't work
let requestHeaders = Object.assign({}, details.headers);
requestHeaders['X-MY-CUSTOM-HEADER'] = '1'
// even if I set requestHeaders to details.headers, the issue persists.
// only removing the requestHeaders property from the object below will make it work again:
callback({ cancel: false, requestHeaders });
},
['blocking', 'requestHeaders'] // doesn't make a difference,
// and I didn't find anything cookie-related for the "extraInfoSpec" argument
);
PHPСкрипт по целевому URL:
<?php
session_start();
var_dump(session_id());
var_dump($_COOKIE);
exit;
?>
(псевдо-) вывод этого скрипта при каждом обновлении приложения или фрейма выглядит так:
string(26) "(random PHP session ID different on every call here)" array(0) { }
Если я удаляюсвойство requestHeaders
из аргумента обратного вызова в main.js
выше, вывод будет таким, как требуется: идентификатор сеанса PHP остается прежним, и все файлы cookie, которые устанавливает целевой сайт, сохраняются. Вот откуда я знаю, что это не проблема на стороне PHP. Я также могу исключить, что сам X-MY-CUSTOM-HEADER
мешает, так как даже если вообще не менять заголовки (см. Комментарии к коду), проблема остается.
Я что-то упустил или это ошибка в электронном? Есть ли способ обойти это?