I am loading a link asynchronously with javascript but I am not getting the script and css files. Can you help me organize my code so that I can load pages under the same domain asynchronously?
document.querySelectorAll('a').forEach(el => { el.addEventListener('click', (e) => { e.preventDefault(); var url = el.href; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function () { var parser = new DOMParser(); const pr = parser.parseFromString(this.responseText, "text/html"); document.querySelector('html').innerHTML=pr.querySelector('html').innerHTML; } xhr.send(); }) });
<a href="https://ipapi.co/">Get</a>
Later I tried to include the script and css files but failed.
document.querySelectorAll('a').forEach(el => { el.addEventListener('click', (e) => { e.preventDefault(); var url = el.href; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function () { var parser = new DOMParser(); const pr = parser.parseFromString(this.responseText, "text/html"); document.querySelector('html').innerHTML=pr.querySelector('html').innerHTML; pr.querySelectorAll('head style').forEach(es => { var sc = document.createElement('style'); sc.src= es.src; document.querySelector('head').appendChild(sc); }); pr.querySelectorAll('head script').forEach(es => { var sc = document.createElement('script'); sc.src= es.src; document.querySelector('head').appendChild(sc); }); pr.querySelectorAll('body style').forEach(es => { var sc = document.createElement('style'); sc.src= es.src; document.querySelector('body').appendChild(sc); }); pr.querySelectorAll('body script').forEach(es => { var sc = document.createElement('script'); sc.src= es.src; document.querySelector('head').appendChild(sc); }); } xhr.send(); }) });
<a href="https://ipapi.co/">2</a>
Although I mark the main site with base, I cannot run the website fully. The javascript files of the loaded page are not working. Normally, location information should come directly, but it doesn’t work. I also tried it on my own website, but the script files are useless. Can you please help?
Advertisement
Answer
I think my new code is working fine. I left it for those who need it.
document.querySelectorAll('a').forEach(el => { el.addEventListener('click', (e) => { e.preventDefault(); var url = el.href; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function () { var parser = new DOMParser(); const pr = parser.parseFromString(this.responseText, "text/html"); document.querySelector('html').innerHTML = ''; document.querySelector('html').appendChild(pr.querySelector('html')); document.querySelectorAll('script').forEach(es => { var script = document.createElement("script"); if (es.src) { script.src = es.src; } script.innerHTML=es.innerHTML; document.body.appendChild(script); }); } xhr.send(); }) });
<a href="https://ipapi.co/json/">Test</a>