使用Chromium NW.js遭遇源隔离问题及Permissions-Policy报错求助
解决方案
1. 处理Permissions-Policy头未识别特性报错
你的NW.js内置Chromium版本较旧,不支持browsing-topics和interest-cohort这两个新权限策略特性,而目标服务器返回的响应头包含了这些特性,导致控制台报错。
解决方法是通过NW.js的webRequestAPI拦截并修改响应头,移除不被支持的特性:
- 在应用
package.json中添加必要权限:
{ "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"] }
- 创建后台脚本(如
background.js),并在package.json中指定:
{ "background": { "scripts": ["background.js"] } }
- 在
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
相关产品推荐
相关产品推荐

