2

Chrome 拡張機能を作成している場合、サーバーが「名前を付けて保存...」ダイアログを強制する場合、新しいタブで画像を開くにはどうすればよいですか? ご覧のとおり、これはContent-Dispositionheader プロパティに関するものです。
ブラウザにそのダイアログを開くように強制する方法については、サーバー側の Q/A が多数ありますが、何も見つかりません。そのダイアログ ウィンドウを望まないエンド ユーザーとしてそれと戦う方法はありません。

4

2 に答える 2

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"
  ]
 

あなたのマニフェストファイルで

参考文献

編集1

このコードの URL を追加し、それでも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"]);
于 2013-01-12T14:00:31.090 に答える
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"]
);
于 2013-02-09T05:29:12.973 に答える