我正在嘗試爲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