Добавление и загрузка Javascript в браузер через Javascript без перезагрузки

У меня есть браузер SWT в приложении Eclipse RAP, где я загружаю что-то на свой локальный сервер и отображаю этот html.

URL-адрес выглядит примерно так: "http://localhost:port/......./myhtml.html"

Я хочу добавить исходники скриптов в свой html без перезагрузки страницы. В настоящее время я делаю это с помощью Javascript, который я выполняю в браузере.

var script = document.createElement('script');
script.setAttribute('src', 'SOMESOURCE');
document.head.appendChild(script);

Это работает, так как я в конечном итоге правильно добавляю теги скрипта в HTML DOM, однако он не загружает ссылки, поэтому я не могу получить доступ к чему-либо, определенному в этих ссылках на скрипт. Но вызов чего-то вроде

window.top.location.reload(false)

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

Основная проблема здесь в том, что я очень ограничен из-за технологий, которые мы здесь используем, поэтому я могу выполнять запросы javascript только в своем браузере.

PS: Для тестирования вы просто можете открыть любой браузер, такой как Chrome и Firefox, открыть его Developer Toolkit и ввести этот скрипт в консоль. Сайт не имеет значения.


person Levent Dag    schedule 05.02.2019    source источник
comment
Это должно работать, хотя... Вы ждете завершения загрузки скрипта? Возможный дубликат: stackoverflow.com/a/7719185/2232127   -  person JensV    schedule 05.02.2019
comment
@JensV я добавил функцию загрузки с предупреждением для тестирования, однако ничего не происходит, поэтому я думаю, что элемент скрипта, хотя он и добавлен, его ссылка не загружена   -  person Levent Dag    schedule 05.02.2019
comment
@JensV Я думаю, проблема в том, что я добавляю тег скрипта после загрузки страницы, но у меня нет другого выбора   -  person Levent Dag    schedule 05.02.2019
comment
вы проверили этот метод stackoverflow.com/a/19737116/4246826   -  person suhail c    schedule 05.02.2019
comment
@JensV это была не совсем та же проблема, что и в другой ошибке, однако другой ответ в ошибке решил ее для меня ... используя объект обещания, он действительно загружает скрипт   -  person Levent Dag    schedule 05.02.2019


Ответы (1)


Спасибо @JensV за помощь.

Проблема была в том, что хотя я добавил свой скрипт, он не загрузил его содержимое. Итак, каким я был, как описано в вопросе.

Однако, как упоминалось от @JensV в ошибке

загружать скрипты асинхронно

описано использование объекта Promise, который будет обрабатывать события загрузки и ошибки.

function loadScript(src) {
    return new Promise(function (resolve, reject) {
        var s;
        s = document.createElement('script');
        s.src = src;
        s.onload = resolve;
        s.onerror = reject;
        document.head.appendChild(s);
    });
}

Итак, что я сделал, так это сначала выполнил этот Javascript и, следовательно, добавил эту функцию, а затем просто выполнил ее с желаемым источником.

Еще раз спасибо за @JensV, вы можете пометить это как дубликат, однако я думаю, что моя проблема была немного другой.

person Levent Dag    schedule 05.02.2019