在<script> 执行之前无法“编辑”它的内容:一旦遇到关闭</script> 标记,立即评估内容。
除了修改代码本身,还可以使用间接方法:覆盖全局Date对象,可以使用以下代码完成:
(function(global) {
var _Date = global.Date; /* Store original Date object */
var overwriteafterXmatches = 1; /* Overwrite after X matches*/
function date(year, month, day, hour, minute, second, millisecond) {
var tmp = /^([A-Z][a-z]{2}, \d{2} [A-Z][a-z]{2} \d{4}) \d{2}:\d{2}:\d{2} GMT$/.exec(year);
switch(arguments.length) {
case 0:
return new _Date();
case 1:
if (tmp) { /* If match */
tmp = new _Date(match[1]);
if (--overwriteAfterXmatches <= 0) {
/* Set the original Date object*/
global.Date = _Date;
}
}
return new _Date(year);
case 2:
return new _Date(year, month);
case 3:
return new _Date(year, month, day);
case 4:
return new _Date(year, month, day, hour);
case 5:
return new _Date(year, month, day, hour, minute);
case 6:
return new _Date(year, month, day, hour, minute, second);
default:
return new _Date(year, month, day, hour, minute, second, millisecond);
}
}
/* Overwrite global Date object*/
global.Date = date;
})(window);
contentscript.js
内容脚本在isolated environment 中运行。这意味着您不能直接修改全局属性。要让代码在Content script 中工作,您必须以这种方式注入<script> 标签:
var code = "\
(function(global) {\
var _Date = global.Date; /* Store original date object*/\
var overwriteafterXmatches = 1; /* Overwrite after X matches*/\
function date(year, month, day, hour, minute, second, millisecond) {\
var tmp = /^([A-Z][a-z]{2}, \d{2} [A-Z][a-z]{2} \d{4}) \d{2}:\d{2}:\d{2} GMT$/.exec(year);\
switch(arguments.length) {\
case 0:\
return new _Date();\
case 1:\
if (tmp) { /* If match */\
tmp = new _Date(match[1]);\
if (--overwriteAfterXmatches <= 0) {\
/* Set the original Date object*/\
global.Date = _Date;\
}\
}\
return new _Date(year);\
case 2:\
return new _Date(year, month);\
case 3:\
return new _Date(year, month, day);\
case 4:\
return new _Date(year, month, day, hour);\
case 5:\
return new _Date(year, month, day, hour, minute);\
case 6:\
return new _Date(year, month, day, hour, minute, second);\
default:\
return new _Date(year, month, day, hour, minute, second, millisecond);\
}\
}\
/* Overwrite global Date object*/\
global.Date = date;\
})(window);\
";
var script = document.createElement('script');
script.appendChild(document.createTextNode(code));
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
manifest.json
这是manifest.json 文件的示例。将<all_urls> 替换为更具体的match pattern。
{
"name": "Test",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["contentscript.js"],
"run_at": "document_start"
}
],
"permissions": ["<all_urls>"]
}