4

と仮定HTMLファイルには、これらのヘッダを持っている:Firefox Web ExtensionのContent-Typeヘッダーを正しくオーバーライドする方法は?サーバーから

Content-Type: application/octet-stream 
Content-Disposition: attachment; 

私は(HTMLファイルは、通常のウェブページとして表示されるように)ウェブ拡張のヘッダを変更したいと思います:

Content-Type: text/html; charset=utf-8 
(Removed Content-Disposition) 

Google Chromeでは、Web拡張機能によってヘッダーが正常に変更され、HTMLファイルは通常のWebページとして表示されます。 Firefox(48)では、ヘッダーは変更されていますが、HTMLファイルをダウンロードするように求められます。私は何か間違っているのですか?これは既知のバグですか?リクエストの

例:はlocalhost:以下8000/test.htmlという

コード。


のWeb拡張 - manifest.jsonを

{ 
    "description": "Change content type", 
    "manifest_version": 2, 
    "name": "change-content-type", 
    "version": "1.0", 

    "permissions": [ 
     "webRequest", "webRequestBlocking", "http://localhost/*" 
    ], 

    "background": { 
     "scripts": ["background.js"] 
    } 
} 

のWeb拡張機能 - 次のようにBackground.jsに見えます:

function setHeader(headers, name, value) { 
    for (var header of headers) { 
     if (header.name.toLowerCase() == name.toLowerCase()) { 
      header.value = value; 
      return; 
     } 
    } 

    headers.push({ name : name, value : value }); 
} 

function removeHeader(headers, name) { 
    for (var i = 0; i < headers.length; i++) { 
     if (headers[i].name.toLowerCase() == name.toLowerCase()) { 
      headers.splice(i, 1); 
      return; 
     } 
    } 
} 

function changeResponseHeaders(details) { 
    removeHeader(details.responseHeaders, "Content-Disposition"); 
    setHeader(details.responseHeaders, "Content-Type", "text/html; charset=utf-8"); 

    return { 
     responseHeaders: details.responseHeaders 
    }; 
} 

chrome.webRequest.onHeadersReceived.addListener(
    changeResponseHeaders, { 
     urls: ["http://localhost/*"], 
     types: ["main_frame", "sub_frame"] 
    }, ["blocking", "responseHeaders"] 
) 

小さなウェブサーバ(など例):

import SimpleHTTPServer 

class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def guess_type(self, path): 
     return 'application/octet-stream'; 

    def end_headers(self): 
     self.send_my_headers() 
     SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self) 

    def send_my_headers(self): 
     self.send_header("Content-Disposition", "attachment;") 

if __name__ == '__main__': 
    SimpleHTTPServer.test(HandlerClass=MyHTTPRequestHandler) 

とサンプルHTMLファイル:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Test</title> 
</head> 
<body> 
    <div>Test</div> 
</body> 
</html> 
+1

バグ[ここ](https://bugzilla.mozilla.org/show_bug.cgi?id=1304331)に提出されました。 –

+1

バグに言及して回答を投稿していただければ幸いです。特に開発者版で修正されているので、未回答のままになることはありません。 – Xan

答えて

2

これはbugだったし、それがfixedてきました。修正はMozilla Firefox 52の予定です。

私は実装について知識がありません。したがって、私は詳細を提供することはできません。

+1

51で一見固定されています(https://bugzilla.mozilla.org/show_bug.cgi?id=1304331#c13を参照)。 –

関連する問題