我在加载外部 URL 的电子应用程序(v6.1.2)中有一个 iframe。我需要使用自定义标头加载该 URL,因此我使用webRequest.onBeforeSendHeaders()它来拦截请求并插入该标头。一旦我传递requestHeaders给回调参数,iframe 中的 cookie 就会停止工作。
在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
);
目标 URL 处的 PHP 脚本:
<?php
session_start();
var_dump(session_id());
var_dump($_COOKIE);
exit;
?>
每次刷新应用程序或 iframe 时,该脚本的(伪)输出如下:
string(26) "(random PHP session ID different on every call here)" array(0) { }
如果我requestHeaders从上面的回调参数中删除该属性main.js,则输出是所希望的:PHP 会话 ID 保持不变,并且目标站点设置的任何 cookie 都保持不变。这就是我知道这在 PHP 端不是问题的方式。我还可以排除它X-MY-CUSTOM-HEADER本身的干扰,因为即使根本不更改标题(参见代码注释),问题仍然存在。
我错过了什么还是这是电子中的错误?有没有办法解决?