lets say I have a page.html
file with this content:
<html> <body> <h1>Hello World</h1> <script>var foo_data = "abc"; </script> </body> </html>
and then on my main.html
file I used:
<script> fetch('/page.html') .then(response => response.text()) .then(data => { document.getElementById('page-content').innerHTML = data; console.log(foo_data); // Will not work }) </script>
Is there a way to access foo_data
on my main.html
file or are there better ways to do this?
Advertisement
Answer
Here is eval()
method. Basically the idea is parse html in data
variable, and execute <script>
elements with eval:
fetch('/page.html') .then(response => response.text()) .then(data => { const html = document.createRange().createContextualFragment(data); //this is unnecesary, unless you need to display html document.getElementById("page-content").innerHTML = data; for(let i = 0, scripts = html.querySelectorAll("script"); i < scripts.length; i++) eval(scripts[i].textContent); //execute scripts console.log(foo_data); }) .catch(er => console.error(er)); /* ignore below */ async function fetch() { return new Promise((resolve, reject) => { resolve(new Promise((resolve, reject) => { resolve({text: () => `<html> <body> <h1>Hello World</h1> <script type="javascript">var foo_data = "abc";</script> </body> </html>`}); })) }) }
<div id="page-content"></div>