Browse Source

Merge pull request #10076 from alexstrat/add/add-support-for-content_scripts.css

Add support for css in content_scripts
Cheng Zhao 7 years ago
parent
commit
fc99785314
2 changed files with 22 additions and 9 deletions
  1. 2 1
      lib/browser/chrome-extension.js
  2. 20 8
      lib/renderer/content-scripts-injector.js

+ 2 - 1
lib/browser/chrome-extension.js

@@ -239,7 +239,8 @@ const injectContentScripts = function (manifest) {
   const contentScriptToEntry = function (script) {
     return {
       matches: script.matches,
-      js: script.js.map(readArrayOfFiles),
+      js: script.js ? script.js.map(readArrayOfFiles) : [],
+      css: script.css ? script.css.map(readArrayOfFiles) : [],
       runAt: script.run_at || 'document_idle'
     }
   }

+ 20 - 8
lib/renderer/content-scripts-injector.js

@@ -28,14 +28,26 @@ const runContentScript = function (extensionId, url, code) {
 const injectContentScript = function (extensionId, script) {
   if (!script.matches.some(matchesPattern)) return
 
-  for (const {url, code} of script.js) {
-    const fire = runContentScript.bind(window, extensionId, url, code)
-    if (script.runAt === 'document_start') {
-      process.once('document-start', fire)
-    } else if (script.runAt === 'document_end') {
-      process.once('document-end', fire)
-    } else if (script.runAt === 'document_idle') {
-      document.addEventListener('DOMContentLoaded', fire)
+  if (script.js) {
+    for (const {url, code} of script.js) {
+      const fire = runContentScript.bind(window, extensionId, url, code)
+      if (script.runAt === 'document_start') {
+        process.once('document-start', fire)
+      } else if (script.runAt === 'document_end') {
+        process.once('document-end', fire)
+      } else if (script.runAt === 'document_idle') {
+        document.addEventListener('DOMContentLoaded', fire)
+      }
+    }
+  }
+
+  if (script.css) {
+    for (const {code} of script.css) {
+      process.once('document-end', () => {
+        var node = document.createElement('style')
+        node.innerHTML = code
+        window.document.body.appendChild(node)
+      })
     }
   }
 }