Chrome扩展程序可以更改页面字符集吗?

时间:2013-12-31 01:51:55

标签: google-chrome google-chrome-extension

我是chrome扩展开发的新手。我想使用扩展名来更改页面字符集,例如chrome setting>> tools>> charset。我看过chrome扩展名为chrome.contentSetting 1的文档。但我还没有找到如何更改页面字符集。

1 个答案:

答案 0 :(得分:3)

是。通过how to change response header in Chrome

chrome.webRequest.onHeadersReceived.addListener(function(details){
    for(var i = 0; i < details.responseHeaders.length; ++i)
        if(details.responseHeaders[i].name.toLowerCase() == 'content-type')
            details.responseHeaders[i].value = 'text/html; charset=shift-jis';
    return {responseHeaders:details.responseHeaders};
}, {urls: ['https://www.google.com/*']}, ['blocking', 'responseHeaders']);

如果您要更新pageload上的charset,则需要chrome.webRequest.onCompleted.addListener更新文档<head>中的元标记。这不能通过chrome.tabs.executeScript()实际调用,因为文档是使用指定的字符集呈现的。

chrome.webRequest.onCompleted.addListener(function(details){
    chrome.tabs.getSelected(null, function(tab) {
        chrome.tabs.executeScript(null, {allFrames:true,code:"document.getElementsByTagName('meta')[0].setAttribute('content', 'text/html; charset=UTF-8');"});
    });
}, {urls: ['http://google.com/']});

这些功能中的任何一个都放在background.js中加载的manifest.json文件中:

{
    "manifest_version": 2,
    // name,description,version...
    "background": {
        "scripts": ["background.js"],
        "persistent": true,
        //"matches": ["https://google.com/"]
    },
    "permissions": [
        "tabs",
        "webRequest",
        "webRequestBlocking"
    ]
}

初始化并呈现页面后,无法更改charset。 document.charset是只读的,触发重新渲染似乎不会影响文档字符集,即使已更改。