如果我正在制作Chrome扩展程序,如果服务器强制“另存为...”对话框,如何在新标签页中打开图像?我可以看到,这是关于Content-Disposition
标题属性的内容
有几十个关于如何强制浏览器打开该对话框的服务器端Q / A,但是我找不到任何东西,如何与最终用户作斗争,谁不想要那个对话窗口。
答案 0 :(得分:1)
在 [RFC 822]的扩展BNF表示法中,Content-Disposition 标题字段定义如下:
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;
如果忽略处置参数,它只需执行以下操作。
"content-disposition","attachment; filename=fname.jpeg"
在服务时下载jpeg文件。
"content-disposition","inline; filename=fname.jpeg"
显示jpeg文件,而不是在服务时下载jpeg文件。
此行为取决于您尝试提供的浏览器和文件。
例如,如果你有一个JPEG文件,内联disposition-type
将在浏览器中打开图像,而附件将强制它下载。
如果您使用的是.ZIP文件,浏览器将无法以内嵌方式显示,因此对于内联和附件disposition-type
,该文件将被下载。
您必须使用WebRequest API
来修改标题
chrome.webRequest.onBeforeSendHeaders.addListener(
function (details) {//Modify Headers
details.requestHeaders.push({
"name": "content-disposition",
"value": "inline; filename=`_some_filename.some_extension`"
});
return {//Update Headers
requestHeaders: details.requestHeaders
};
}, {
urls: ["<all_urls>"]
}, ["blocking", "requestHeaders"]);//Block the requests
确保您声明
"permissions": [
"webRequest",
"webRequestBlocking"
]
清单文件中的
添加此代码的网址,并检查是否仍然会抛出save as
对话框。
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"]);
答案 1 :(得分:0)
@Sudarshan给出了正确的方向。
但它出现在另一个网站上,即使Content-Disposition
也不够
所以我目前的工作代码是:
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"]
);