通过Javascript向浏览器添加和加载Javascript,而无需重新加载



我在Eclipse RAP应用程序中有一个SWT浏览器,我在本地服务器上加载一些东西并显示该html。

url如下所示:"http://localhost:port/......./myhtml.html">

我想在不重新加载页面的情况下将脚本源添加到我的html中。目前,我正在用一个Javascript来做这件事,我在浏览器中执行它。

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

这确实使我最终将脚本标记正确添加到HTMLDOM中,但它没有加载引用,因此我无法访问这些脚本引用中定义的任何内容。但是调用类似的东西

window.top.location.reload(false)

也不起作用,因为这会重新加载HTML,并因此删除我最初添加的脚本标记。

这里的主要问题是,由于我们在这里使用的技术,我受到了很大的限制,所以我只能在浏览器中执行javascript查询。

PS:为了进行测试,你只需要打开任何浏览器,比如Chrome和Firefox,打开它的开发者工具包,然后在控制台中键入该脚本。网站无关紧要。

感谢@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,你可能想把这个标记为重复,但我认为我的问题与那个有点不同。

最新更新