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瀏覽器中,網絡擴展程序成功更改標題,並且HTML文件顯示爲普通網頁。在Firefox(48)中,雖然標題已更改,但系統提示我下載HTML文件。我做錯了什麼或者這是一個已知的錯誤?的請求

實施例:本地主機: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"] 
) 

一個小小的Web服務器(如一個例子):

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

提交了一個bug [這裏](https://bugzilla.mozilla.org/show_bug.cgi?id=1304331)。 –

+1

如果你會發佈一個答案,提及這個錯誤 - 特別是因爲它已經在dev版本中修復了,所以它不會掛起未答覆,我將不勝感激。 – Xan

回答

2

這是一個bug,它一直fixed。修復似乎計劃爲Mozilla Firefox 52

我對實施並不瞭解,因此我無法提供更多詳細信息。

+1

它在51中看似固定,請參閱https://bugzilla.mozilla.org/show_bug.cgi?id=1304331#c13 –