You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Chromium NW.js遭遇源隔离问题及Permissions-Policy报错求助

解决方案

1. 处理Permissions-Policy头未识别特性报错

你的NW.js内置Chromium版本较旧,不支持browsing-topics和interest-cohort这两个新权限策略特性,而目标服务器返回的响应头包含了这些特性,导致控制台报错。

解决方法是通过NW.js的webRequestAPI拦截并修改响应头,移除不被支持的特性:

  1. 在应用package.json中添加必要权限:
{
  "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"]
}
  1. 创建后台脚本(如background.js),并在package.json中指定:
{
  "background": {
    "scripts": ["background.js"]
  }
}
  1. 在background.js中编写拦截逻辑:
chrome.webRequest.onHeadersReceived.addListener(
  function(details) {
    for (let i = 0; i < details.responseHeaders.length; i++) {
      const header = details.responseHeaders[i];
      if (header.name.toLowerCase() === 'permissions-policy') {
        // 移除不支持的特性
        header.value = header.value.replace(/(browsing-topics|interest-cohort)(=[^;]+)?;?\s*/g, '');
        // 清理末尾多余的分号或空格
        header.value = header.value.replace(/;\s*$/, '').trim();
        // 值为空则移除整个头
        if (!header.value) {
          details.responseHeaders.splice(i, 1);
          i--;
        }
      }
    }
    return { responseHeaders: details.responseHeaders };
  },
  { urls: ["<all_urls>"] },
  ["blocking", "responseHeaders"]
);

2. 处理源隔离(Origin Isolation)报错

该错误是因为同一源(如https://example.com)的部分页面设置了Origin-Isolation: true头,另一部分未设置,导致Chromium无法统一隔离规则。

情况1:可控制目标服务器响应头

确保该源下所有页面统一设置Origin-Isolation: true,或统一不设置这个头,避免规则冲突。

情况2:无法控制服务器头

通过webRequestAPI拦截响应头,统一处理Origin-Isolation:

  • 要么给该源所有页面添加Origin-Isolation: true头;
  • 要么移除该源所有页面的Origin-Isolation头。

修改background.js,添加以下逻辑:

chrome.webRequest.onHeadersReceived.addListener(
  function(details) {
    let hasOriginIsolation = false;
    // 检查并移除现有Origin-Isolation头(如需统一添加则注释这段)
    for (let i = 0; i < details.responseHeaders.length; i++) {
      const header = details.responseHeaders[i];
      if (header.name.toLowerCase() === 'origin-isolation') {
        hasOriginIsolation = true;
        details.responseHeaders.splice(i, 1);
        i--;
      }
    }
    // 如需统一添加头则取消这段注释
    // if (!hasOriginIsolation) {
    //   details.responseHeaders.push({ name: 'Origin-Isolation', value: 'true' });
    // }
    return { responseHeaders: details.responseHeaders };
  },
  { urls: ["https://example.com/*", "https://YYYY/*"] }, // 替换为你的目标源
  ["blocking", "responseHeaders"]
);

根据需求选择移除或统一添加,注释掉不需要的部分即可。


内容的提问来源于stack exchange,提问作者Safari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:52:36