Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用Chrome中的“另存为”对话框_Javascript_Google Chrome_Google Chrome Extension_Content Disposition - Fatal编程技术网

Javascript 禁用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

如果我正在制作Chrome扩展,如果服务器强制“另存为…”对话框,如何在新选项卡中打开图像?正如我所看到的,这是关于
内容处置
标题属性的内容。

关于如何强制浏览器打开该对话框,有几十个服务器端问答,但我什么也找不到,作为一个不想要该对话框窗口的最终用户,如何与之抗争。

在内容配置的扩展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"]
);