Javascript 禁用Chrome中的“另存为”对话框
如果我正在制作Chrome扩展,如果服务器强制“另存为…”对话框,如何在新选项卡中打开图像?正如我所看到的,这是关于Javascript 禁用Chrome中的“另存为”对话框,javascript,google-chrome,google-chrome-extension,content-disposition,Javascript,Google Chrome,Google Chrome Extension,Content Disposition,如果我正在制作Chrome扩展,如果服务器强制“另存为…”对话框,如何在新选项卡中打开图像?正如我所看到的,这是关于内容处置标题属性的内容。 关于如何强制浏览器打开该对话框,有几十个服务器端问答,但我什么也找不到,作为一个不想要该对话框窗口的最终用户,如何与之抗争。在内容配置的扩展BNF符号中 标题字段定义如下: disposition := "Content-Disposition" ":" disposit
内容处置
标题属性的内容。关于如何强制浏览器打开该对话框,有几十个服务器端问答,但我什么也找不到,作为一个不想要该对话框窗口的最终用户,如何与之抗争。在内容配置的扩展BNF符号中 标题字段定义如下:
disposition := "Content-Disposition" ":"
disposition-type
*(";" disposition-parm)
disposition-type := "inline"
/ "attachment"
/ extension-token
; values are not case-sensitive
disposition-parm := filename-parm / parameter
filename-parm := "filename" "=" value;
如果忽略处置参数,只需执行以下操作
“内容处置”、“附件;文件名=fname.jpeg”
提供jpeg文件时下载该文件
“内容配置”、“内联;文件名=fname.jpeg”
显示jpeg文件,而不是在提供jpeg文件时下载
此行为取决于浏览器和您试图提供的文件
例如,如果您有一个JPEG文件,内联处置类型将在浏览器中打开图像,而附件将强制下载图像
如果您使用的是.ZIP文件,浏览器将无法将其内联显示,因此对于内联和附件处置类型
,将下载该文件
您必须使用WebRequest API
,才能修改标题
示例代码
在您的清单文件中
工具书类
编辑1
添加此代码的URL,并检查它是否仍然抛出一个另存为
对话框
chrome.webRequest.onHeadersReceived.addListener(
function (details) {
var _content_to_append = {
"name": "content-disposition",
"value": "inline"
};
details.responseHeaders.push(_content_to_append);
return {
responseHeaders: details.responseHeaders
};
}, {
urls: ["<all_urls>"]
}, ["blocking", "responseHeaders"]);
chrome.webRequest.onHeadersReceived.addListener(
功能(详情){
变量(内容)到(追加)={
“名称”:“内容处置”,
“值”:“内联”
};
details.responseHeaders.push(\u content\u to\u append);
返回{
负责人:详细信息。负责人
};
}, {
URL:[“”]
}","阻拦","负责人",;
@Sudarshan给出了正确的方向
但在另一个网站上,甚至内容配置都是不够的。
因此,我目前的工作代码是:
chrome.webRequest.onHeadersReceived.addListener(
function (details) {
for (var i in details.responseHeaders) {
if (details.responseHeaders[i].name == "Content-Disposition")
details.responseHeaders[i].value = "inline; filename=\"\"";
if (details.responseHeaders[i].name == "Content-Type")
details.responseHeaders[i].value = "image/jpeg";
};
return { responseHeaders: details.responseHeaders };
}, {
urls: [
"http://qwe.rty.net/*",
"http://*.qwerty.com/*",
]
}, ["blocking", "responseHeaders"]
);
谢谢你这么详细的回答,但我不能让它工作。下面是一个示例问题图像url、当前权限和来自background.js和logged object的侦听器:它仍然打开对话框。@Nakilon:您是否也可以共享您的响应头,只是希望确保您的服务器没有忽略任何请求头。如何查看响应头?开发工具只显示url“GET”和200。@Nakilon:打开网络面板
,单击请求
查找标题选项卡,其中列出了请求和响应标题。成功了!1.无需覆盖sendheaders 2。标题应就地编辑,而不是推送。最后的解决方案是:
chrome.webRequest.onHeadersReceived.addListener(
function (details) {
var _content_to_append = {
"name": "content-disposition",
"value": "inline"
};
details.responseHeaders.push(_content_to_append);
return {
responseHeaders: details.responseHeaders
};
}, {
urls: ["<all_urls>"]
}, ["blocking", "responseHeaders"]);
chrome.webRequest.onHeadersReceived.addListener(
function (details) {
for (var i in details.responseHeaders) {
if (details.responseHeaders[i].name == "Content-Disposition")
details.responseHeaders[i].value = "inline; filename=\"\"";
if (details.responseHeaders[i].name == "Content-Type")
details.responseHeaders[i].value = "image/jpeg";
};
return { responseHeaders: details.responseHeaders };
}, {
urls: [
"http://qwe.rty.net/*",
"http://*.qwerty.com/*",
]
}, ["blocking", "responseHeaders"]
);