如何在Chrome扩展程序中阻止内嵌javascript?

时间:2014-07-04 07:46:31

标签: javascript jquery google-chrome google-chrome-extension

需要用另一个替换网站语法荧光笔。我在manifest.json文件中添加了以及块相关的JS和CSS文件:

"background": {
   "scripts": ["background.js"]
},
"permissions": [   
    "webRequest",
    "webRequestBlocking",
    "http://*.oschina.net/", "https://*.oschina.net/"
],

background.js文件中的内容:

chrome.webRequest.onBeforeRequest.addListener(
function(){ 
    return {cancel: true}; 
},
{
    urls: [
        "http://my.oschina.net/js/syntax-highlighter-2.1.382/scripts/brush.js",
        "http://my.oschina.net/js/syntax-highlighter-2.1.382/styles/shCore.css",
        "http://my.oschina.net/js/syntax-highlighter-2.1.382/styles/shThemeDefault.css"
    ],
    types: ["script","stylesheet"]
},
["blocking"]

);

所以前语法高亮显示器需要的js和css被阻止了,但是有一个在内联html中调用的初始化函数:

$(document).ready(function(){
    SyntaxHighlighter.config.clipboardSwf = '/js/syntax-highlighter-2.1.382/scripts/clipboard.swf';
    SyntaxHighlighter.all();
});

所以我在控制台中收到错误消息,如何在chrome扩展脚本中阻止它?

1 个答案:

答案 0 :(得分:3)

Chrome不提供任何允许您阻止特定内联脚本的方法。 (onbeforescriptexecute is not supported (yet))。

您可以使用chrome.contentSettings API禁用所有内联脚本,也可以使用chrome.webRequest API逐页添加Content-Security-Policy标头包含unsafe-inline

您很可能不想阻止所有脚本,但只是阻止代码段运行。没有一个通用的方法,但在您的情况下,您可以将其中一个被阻止的脚本重定向到定义方法的存根,例如。

 chrome.webRequest.onBeforeRequest.addListener(
    function() {
        return {redirectUrl: chrome.runtime.getURL("brush.js") };
    },
    {
        urls: [
            "http://my.oschina.net/js/syntax-highlighter-2.1.382/scripts/brush.js"
        ],
        types: ["script"]
    },
    ["blocking"]

brush.js

if (!window.SyntaxHighlighter) window.SyntaxHighlighter = {};
if (!SyntaxHighlighter.config) SyntaxHighlighter.config = {};
SyntaxHighlighter.all = function() {};

不要忘记将您的脚本添加到清单文件中的web_accessible_resources。当您修改了清单文件时,请不要忘记重新加载Chrome扩展程序。