diff --git a/decipher.js b/decipher.js index f53e7ca..0c6bf81 100644 --- a/decipher.js +++ b/decipher.js @@ -1,55 +1,34 @@ -// function clone_script_node(node){ -// // console.log("\n\n\nnew script!") -// var script = document.createElement("script"); -// script.text = node.innerHTML; -// // console.log("text: " + script.text) -// var i = -1, attrs = node.attributes, attr; -// while (++i < attrs.length) { -// script.setAttribute((attr = attrs[i]).name, attr.value); -// if (attr.name === "src") -// console.log(attr.value) -// } -// return script; -// } - - -// function replace_all_script_nodes(node) { -// if (node.tagName === 'SCRIPT') { -// node.parentNode.replaceChild(clone_script_node(node), node); -// } else { -// var i = -1, children = node.childNodes; -// while (++i < children.length) { -// replace_all_script_nodes(children[i]); -// } -// } - -// return node; -// } - -function insertHTML(html){ - // if no append is requested, clear the target element - // if(!append) dest.innerHTML = ''; - // create a temporary container and insert provided HTML code - let container = document.createElement('div'); - container.innerHTML = html; - // cache a reference to all the scripts in the container - let scripts = container.querySelectorAll('script'); - // get all child elements and clone them in the target element - let nodes = container.childNodes; - // for( let i=0; i< nodes.length; i++) dest.appendChild( nodes[i].cloneNode(true) ); - // force the found scripts to execute... - for( let i=0; i< scripts.length; i++){ - let script = document.createElement('script'); - script.type = scripts[i].type || 'text/javascript'; - if( scripts[i].hasAttribute('src') ) script.src = scripts[i].src; - script.innerHTML = scripts[i].innerHTML; - document.head.appendChild(script); - document.head.removeChild(script); +function load_script(o_script, callback) { + + let script = document.createElement('script'); + script.type = o_script.type || 'text/javascript'; + + if(o_script.hasAttribute('src')) { + script.src = o_script.src; + script.onload = callback + } + + script.innerHTML = o_script.innerHTML; + document.head.appendChild(script); + + if(o_script.src === "") { + // NOTE(Felix): it seems the onload is not called on script nodes that + // define the js inline instead of through a src attribute, so for + // them we call the callback manually and hope for the best. + callback(); } - // done! - return true; } +var next_script_index = 0 +var deferred_scripts = [] + +function load_next_deferred_script() { + console.log("recurse!") + if (next_script_index >= deferred_scripts.length) + return + + load_script(deferred_scripts[next_script_index++], () => load_next_deferred_script()) +} function decrypt_page() { var key_str = "" @@ -115,8 +94,10 @@ function decrypt_page() { var dec_text = new TextDecoder().decode(dec_bytes) document.body.outerHTML = "" - // insertHTML(document.body.innerHTML) - // replace_all_script_nodes(document.getElementsByTagName("body")[0]); + + deferred_scripts = document.body.querySelectorAll('script'); + load_next_deferred_script() + } window.onload = decrypt_page