Как я могу заменить окно html, а также изменить местоположение, чтобы активы в html загружались правильно? - PullRequest
0 голосов
/ 11 декабря 2018

Предполагая, что у меня есть некоторый HTML-код с предопределенными активами, использующими относительные пути, как мне загрузить этот HTML-код на текущей странице и изменить местоположение окна на правильный URL-адрес одновременно, чтобы страница и все ее активы загружались правильно.

В настоящее время, если я использую:

const w = window.open()
w.document.write("<html><body><p>help</p></body></html>")
w.location.replace("http://baseUrl.com")

Затем страница отображает HTML, а затем перезагружается при замене местоположения, что делает document.write бесполезным.

Есть лиспособ сделать оба одновременно, чтобы URL-адрес загружался так же, как HTML-код?

Если я делаю

const w = window.open()
w.location.replace("http://baseUrl.com")
w.document.write("<html><body><p>help</p></body></html>")

Третья строка не запускается, потому что я теряю доступ к w переменная при замене местоположения.

Любая помощь будет оценена.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Я не уверен, есть ли более подходящие способы вместо относительных URL-адресов для вашей цели, но вы можете использовать тег <base href='...'>:

<script type="text/javascript">
    document.head.innerHTML = document.head.innerHTML + "<base href='http://baseUrl.com/' />";
</script>

Базовый тег обычно требует конечного символа "/" ввсе кончено.

пример:

<base href="http://localhost/mywebsite/" />

Тогда все URL в вашем HTML могут быть просто такими:

<img src="images/example.png" />
<a href="/images/example.png">Link To Image</a>
0 голосов
/ 11 декабря 2018

Вы можете сделать это следующим образом (используя setInterval, чтобы обнаружить загруженное открытое окно, затем написать свою справочную информацию, URL должен быть в том же домене):

var w = window.open("http://baseUrl.com")
        var writeAsserts = function () 
        {
            if (w.document.body.childNodes.length > 0) {
                clearInterval(interval);
                var div = w.document.createElement("div")
                div.innerHTML = "<span>help</span>";
                w.document.body.appendChild(div)
            }
        }
        var interval = setInterval(writeAsserts,10)
0 голосов
/ 11 декабря 2018

Что вы можете сделать, это использовать строку запроса в window.replace, например, так:

const w = window.open();
window.location.replace("http://baseUrl.com?data=" + encodeUriComponent("<html><body><p>help</p></body></html>"));

Затем в файле по адресу baseUrl.com:

var data = decodeUriComponent(window.location.href).split("?")[1];
document.write(data);

Что это делаетесли он передает закодированную строку запроса URI в URL (?data=<html><body><p>help</p></body></html>), затем получает и декодирует ее, берет бит в конце (HTML) и записывает его в документ.Надеюсь, это поможет!

...