我正在尝试为Chrome编写一个用户脚本,为特定网站交换特定的CSS文件。如何在页面呈现之前切换用户脚本中的CSS文件?
关于将CSS文件转换为另一个CSS文件的部分工作正常,问题是我无法在呈现页面之前发生这种情况。当第一次渲染原始布局时,这会导致网站非常丑陋的闪烁,然后很快被插入的新布局取代。
我已经使用@run_at document_start
让我的用户脚本在页面呈现之前运行,但似乎并不正常。从我可以看到from the official Chrome documentation这应该被支持。
供参考,这是我的完整剧本:
// ==UserScript==
// @name name
// @namespace namespace
// @version 0.1a
// @description description
// @include http://example.com/*
// @run_at document_start
// ==/UserScript==
var sheets = document.getElementsByTagName("link");
for (var i=0; i<sheets.length; ++i) {
if (sheets[i].href.indexOf('all.css') != -1) {
sheets[i].href = 'http://replacement.com/all.css';
}
}
我调查了一下再和管理,设置在我的脚本断点(出于某种原因,剧本最初没有出现在开发者工具)。在我的脚本开始处的中断点处停留时,该站点已经完全加载了原始主题。所以看起来@run_at document_start
指令不起作用,我的脚本在页面加载后执行。虽然我不明白为什么会出现这种情况。
这可能是因为它需要另一次异步往返才能下载css,这留下了循环窗口来呈现文档。为什么不尝试使用dataUri作为潜在的同步选项来呈现新的CSS内容? (这你必须事先下载并缓存) – 2012-03-27 18:06:37
这在我的情况下似乎不是问题,我已经用更多的细节更新了我的问题。看来我的脚本没有在正确的时间执行,出于某种原因'@run_at document_start'在我的情况下不起作用。 – 2012-03-27 18:46:11