From 2990f93a20f22770b8f3ac5d189ccb606187d35e Mon Sep 17 00:00:00 2001 From: Maxime Thirouin Date: Sun, 4 May 2014 08:44:18 +0200 Subject: [PATCH] Test evalScript --- src/scripts/lib/eval-script.js | 29 +++++++++++++++++++++++++++++ tests/scripts/lib/eval-scripts.js | 22 ++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/scripts/lib/eval-script.js create mode 100644 tests/scripts/lib/eval-scripts.js diff --git a/src/scripts/lib/eval-script.js b/src/scripts/lib/eval-script.js new file mode 100644 index 0000000..d34436a --- /dev/null +++ b/src/scripts/lib/eval-script.js @@ -0,0 +1,29 @@ +module.exports = function(el) { + // console.log("going to execute script", el) + + var code = (el.text || el.textContent || el.innerHTML || "") + var head = document.querySelector("head") || document.documentElement + var script = document.createElement("script") + + if (code.match("document.write")) { + if (console && console.log) { + console.log("Script contains document.write. Can’t be executed correctly. Code skipped ", el) + } + return false + } + + script.type = "text/javascript" + try { + script.appendChild(document.createTextNode(code)) + } + catch (e) { + // old IEs have funky script nodes + script.text = code + } + + // execute + head.insertBefore(script, head.firstChild) + head.removeChild(script) // avoid pollution + + return true +} diff --git a/tests/scripts/lib/eval-scripts.js b/tests/scripts/lib/eval-scripts.js new file mode 100644 index 0000000..2d53544 --- /dev/null +++ b/tests/scripts/lib/eval-scripts.js @@ -0,0 +1,22 @@ +var tape = require("tape") + +var evalScript = require("../../../src/scripts/lib/eval-script") + +tape("test evalScript method", function(t) { + document.body.className = "" + + var script = document.createElement("script") + script.innerHTML = "document.body.className = 'executed'" + + t.equal(document.body.className, "", "script hasn't been executed yet") + + evalScript(script) + t.equal(document.body.className, "executed", "script has been properly executed") + + // script.innerHTML = "document.write('failure')" + // var bodyText = document.body.text + // evalScript(script) + // t.equal(document.body.text, bodyText, "document.write hasn't been executed") + + t.end() +})