Javascript webRequest.OnHeaders接收到未触发
我试图在iFrame中加载网站,但服务器正在发送Javascript webRequest.OnHeaders接收到未触发,javascript,firefox,firefox-addon,firefox-addon-webextensions,Javascript,Firefox,Firefox Addon,Firefox Addon Webextensions,我试图在iFrame中加载网站,但服务器正在发送X-Frame-Options:SAMEORIGIN标题,因此我尝试使用onHeadersReceived修改标题,尽管我无法使其正常工作 manifest.json { "manifest_version": 2, "name": "__MSG_extensionName__", "description": "__MSG_extensionD
X-Frame-Options:SAMEORIGIN
标题,因此我尝试使用onHeadersReceived修改标题,尽管我无法使其正常工作
manifest.json
{
"manifest_version": 2,
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDescription__",
"default_locale": "en",
"version": "0.1",
"author": "author",
"homepage_url": "https://github.com/",
"icons": {
"48": "assets/icons/logo.png"
},
"background": {
"page": "../../background.html"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["scripts/dist/bundle.js"],
"css": ["assets/css/main.css"]
}
],
"permissions": [
"tabs",
"webRequest",
"contextMenus",
"webNavigation",
"webRequestBlocking"
],
"web_accessible_resources": [
"assets/icons/logo.png"
]
}
contextMenu.js
browser.contextMenus.create( {
id: "customsearch",
title: "Search",
contexts: ["selection"]
} );
// Context menu onClicked listener
browser.contextMenus.onClicked.addListener( (info, tab) => {
if (info.menuItemId = "custom-search") {
sendMessageToTab(tab, info);
}
} );
function sendMessageToTab(tab, info) {
browser.tabs.sendMessage(
tab.id,
{ query: info.selectionText }
);
}
var extraInfoSpec = ['blocking', 'responseHeaders'];
var filter = {
urls: ['<all_urls>'],
tabId: -1
};
// Bypass X-Frame-Options
browser.webRequest.onHeadersReceived.addListener(
modifyHeadersCallback,
filter,
extraInfoSpec
);
// onHeadersReceived Callback
function modifyHeadersCallback(details) {
let modifiedResponseHeaders = details.responseHeaders.filter(
header => !(header.name.toLowerCase() == 'x-frame-options' || header.name.toLowerCase() == 'content-security-policy')
);
return {responseHeaders: modifiedResponseHeaders};
};
background.js
browser.contextMenus.create( {
id: "customsearch",
title: "Search",
contexts: ["selection"]
} );
// Context menu onClicked listener
browser.contextMenus.onClicked.addListener( (info, tab) => {
if (info.menuItemId = "custom-search") {
sendMessageToTab(tab, info);
}
} );
function sendMessageToTab(tab, info) {
browser.tabs.sendMessage(
tab.id,
{ query: info.selectionText }
);
}
var extraInfoSpec = ['blocking', 'responseHeaders'];
var filter = {
urls: ['<all_urls>'],
tabId: -1
};
// Bypass X-Frame-Options
browser.webRequest.onHeadersReceived.addListener(
modifyHeadersCallback,
filter,
extraInfoSpec
);
// onHeadersReceived Callback
function modifyHeadersCallback(details) {
let modifiedResponseHeaders = details.responseHeaders.filter(
header => !(header.name.toLowerCase() == 'x-frame-options' || header.name.toLowerCase() == 'content-security-policy')
);
return {responseHeaders: modifiedResponseHeaders};
};
var extraInfoSpec=['blocking','responseHeaders'];
变量过滤器={
网址:[''],
表-1
};
//绕过X帧选项
browser.webRequest.onHeadersReceived.addListener(
修改HeadersCallback,
过滤器,
外部信息规范
);
//onHeadersReceived回调
函数modifyHeadersCallback(详细信息){
让modifiedResponseHeaders=details.responseHeaders.filter(
header=>!(header.name.toLowerCase()='x-frame-options'| | header.name.toLowerCase()=='content security policy')
);
返回{responseHeaders:modifiedResponseHeaders};
};
上下文菜单按预期工作,问题在于browser.webRequest.onHeadersReceived
侦听器,它似乎根本没有被触发,因为我在控制台上没有收到任何错误或日志。
我做了任何广泛的搜索,并尝试了我找到的大多数解决方案,但对我的案例没有任何效果。你能发现我的方法有什么错误吗?Firefox
您只需从过滤器
对象中删除tabId:-1
:
browser.webRequest.onHeadersReceived.addListener(
修改HeadersCallback,
{URL:['但是,如果有人想报告,请在上打开一个新问题。我想这是故意的,因为extraHeaders
模式意味着此标题在内部网络进程中处理,这与浏览器进程是分开的。您还需要将站点添加到manifest.json中的权限
,在本例中是“”
我尝试过,但没有成功。我更新了我的manifest.json
权限,并在extraInfoSpec
数组中添加了extraHeaders
,但现在它抛出此错误未捕获错误:参数extraInfoSpec的类型错误(错误处理2:无效枚举值“extraHeaders”)对于webRequest.onHeadersReceived.
。对于Firefox,您只需删除tabId:-1
。查看更新的代码。它实际上正在工作!!正是tabId
的存在和权限中缺少url
造成了这种混乱。我真的很感激,干杯!