Chrome 提供webRequest
API 来拦截和修改 HTTP 请求。你可以删除X-Frame-Options
标题以允许在 iframe 中内联页面。
chrome.webRequest.onHeadersReceived.addListener(
function(info) {
var headers = info.responseHeaders;
for (var i=headers.length-1; i>=0; --i) {
var header = headers[i].name.toLowerCase();
if (header == 'x-frame-options' || header == 'frame-options') {
headers.splice(i, 1); // Remove header
}
}
return {responseHeaders: headers};
}, {
urls: [
'*://*/*', // Pattern to match all http(s) pages
// '*://*.example.org/*', // Pattern to match one http(s) site
],
types: [ 'sub_frame' ]
}, [
'blocking',
'responseHeaders',
// Modern Chrome needs 'extraHeaders' to see and change this header,
// so the following code evaluates to 'extraHeaders' only in modern Chrome.
chrome.webRequest.OnHeadersReceivedOptions.EXTRA_HEADERS,
].filter(Boolean)
);
在清单中,你需要指定webRequest
和webRequestBlocking
权限,以及你打算拦截的URL 模式,即"*://*/*"
或"*://www.example.org/*"
上面的示例。
结果发现 webRequest 在内容脚本上是不可访问的。我得把它移到背景上。
@IanMcIntyreSilber 你好,我只是想知道你是否曾经使用过它,如果你做到了,你是否可以教我。
@RobW X-Frame-Options 可以设置为 HTML 元元素,请参阅:javascript.info/tutorial/clickjacking
@GuyKorland 我明白了。Chrome 扩展程序无法修改响应正文,因此您很不走运。
@TaiwanGrapefruitTea 扩展名的标题修改不会显示在 devtools 中。如果想查看header修改是否成功,可以查看chrome://net-internals/#events。