旧的CSS在镀铬扩展上闪烁

时间:2016-03-25 20:07:15

标签: javascript css google-chrome-extension

我正在尝试制作一个改变网站css的chrome扩展程序。使用Ajax从pastebin加载css。问题是在显示新的css之前会显示旧网站 - 如何才能显示旧网站以便只显示已更改css的网站?

Content.js:

var s = document.createElement('style');
s.setAttribute("type", "text/css");
var r;

$('head').ready(function() {
    $.get("https://pastebin.com/raw/css-file", function(r) { 
    s.innerHTML = r;
    document.head.appendChild(s);
    });
});

manifest.json(相关):

{
"permissions": [
    "https://scratch.mit.edu/*",
    "https://pastebin.com/raw/*"
],

"content_scripts": [
  {
    "matches": [
      "https://scratch.mit.edu/*",
      "http://scratch.mit.edu/*"
    ],
    "js": ["jquery-2.2.2.min.js", "content.js"]
  }
]
}

1 个答案:

答案 0 :(得分:0)

一个选项是在加载新样式之前防止正文可见,如下所示:

$('body').hide();

var s = document.createElement('style');
s.setAttribute("type", "text/css");
var r;

$('head').ready(function() {
    $.get("https://pastebin.com/raw/css-file", function(r) { 
        s.innerHTML = r;
        document.head.appendChild(s);
        $('body').show();
    });
});

但这有一个方面的问题,因为你不确定$ .get()调用需要多长时间,如果需要很长时间才能返回,页面将只是空白。< / p>

因此,不是隐藏身体,更好的解决方案可能是临时替换身体html,就像这样......

// Save the original body, so we can put it back later
var originalBody = $('body').html();

// Replace the body with a please wait message (use whatever you want)
var pleaseWaitBody = '<div style="text-align: center; margin-top: 100px;">Loading, please wait...</div>';
$('body').html(pleaseWaitBody); 

var s = document.createElement('style');
s.setAttribute("type", "text/css");
var r;

$('head').ready(function() {
    $.get("https://pastebin.com/raw/css-file", function(r) { 
        s.innerHTML = r;
        document.head.appendChild(s);

        // Now that the new style is applied, put the original body back
        $('body').html(originalBody);
    });
});

编辑: 上面的代码不适用于Chrome扩展程序。但是,有一个更有效的StackOverflow答案可以提供帮助。请参阅How to hide everything before page load with Chrome Extension