javascript - 在 Chrome 扩展中将 CSS 属性作为 javascript 注入(inject)而不覆盖以前的属性

标签 javascript css google-chrome google-chrome-extension

所以我尝试在 chrome 扩展中执行以下代码行:

  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "font-family: Courier !important");}'
  });
  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "font-size: 18pt !important");}'
  });
  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "backgrond-color: #fbfbfb !important");}'
  });
  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "line-height: 1.5 !important");}'
  });

问题是,每一行都会覆盖最后一行的 CSS 更改。我可以通过将所有 CSS 更改放在一行中来解决这个问题。但是,我想让每一行都根据变量的状态工作。例如:

if (var_a === "true") {
  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "font-family: Courier !important");}'
  });
}
if (var_b === "true) {
  chrome.tabs.executeScript({
    code: 'var elements = document.getElementsByTagName("*"); for (var i=0; i < elements.length; i++) { elements[i].setAttribute("style", "font-size: 18pt !important");}'
  });
}

我该怎么做?

最佳答案

在应用之前将样式更改收集到一个地方。

var style = "";
if (var_a === "true") style += "font-family: Courier !important;";
if (var_b === "true") style += "font-size: 18pt !important;";
/* ... */
chrome.tabs.executeScript({
  code:
    'var elements = document.getElementsByTagName("*");' +
    'for (var i=0; i < elements.length; i++) {' + 
      'elements[i].setAttribute("style", "' + style + '");' +
    '}'
});

或者,您可以操纵 .style property而不是直接属性。例如:

elements[i].style.setProperty("font-family", "Courier", "important");

在不覆盖的情况下一个接一个地操作规则。

关于javascript - 在 Chrome 扩展中将 CSS 属性作为 javascript 注入(inject)而不覆盖以前的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058623/

相关文章:

javascript - 定位在绝对定位的 div 下方

javascript - 在查看页面源代码中隐藏 URL

javascript - 获取 jQuery Promtbox 值并存储到 var 中

jquery - 需要像绘画应用程序一样在 Canvas 上创建多个圆圈

image - Chrome 中的高质量图像渲染

javascript - 如何在不刷新页面的情况下获取页面上的新内容

javascript - 打开页面时显示 jQuery Lightbox

javascript - 单击元素外部任意位置时删除类

javascript - 设置 Iframe 的高度等于其内容

javascript - 在 chrome 控制台上调试 javascript 函数