需要用另一个替换网站语法荧光笔。我在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扩展脚本中阻止它?
答案 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扩展程序。