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

У меня есть SWT-браузер в Eclipse RAP Application, где я загружаю что-то на свой локальный сервер и отображаю этот 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 и набрать этот скрипт в консоли. Сайт не имеет значения.

1 ответ

Решение

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

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

Однако, как упоминалось из @JensV в Bug

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

описано использование объекта 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, вы можете пометить это как дубликат, однако я думаю, что моя проблема была немного другой.

Другие вопросы по тегам