【发布时间】:2012-03-27 17:50:49
【问题描述】:
我正在尝试为 Chrome 编写一个用户脚本,用于切换特定网站的特定 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 内容? (这个你必须事先下载和缓存)
-
这似乎不是我的问题,我已经用更多细节更新了我的问题。似乎我的脚本没有在正确的时间执行,由于某种原因
@run_at document_start在我的情况下不起作用。
标签: javascript google-chrome google-chrome-extension