通过Java脚本将Java脚本添加和加载到浏览器中,而无需重新加载

时间:2019-02-05 12:36:17

标签: javascript eclipse-rap

我在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);

这确实可以使我最终将脚本标签正确添加到HTML DOM,但是它不会加载引用,因此我无法访问这些脚本引用中定义的任何内容。但是调用类似

window.top.location.reload(false)

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

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

PS: 要进行测试,您只需打开任何浏览器(例如Chrome和Firefox),打开其开发者工具包,然后在控制台中键入该脚本即可。网站没关系。

1 个答案:

答案 0 :(得分:0)

感谢@JensV帮助我。

问题是,尽管我添加了我的脚本,但没有加载其内容。所以我是这个问题中描述的。

但是正如@JensV在Bug中提到的

load scripts asynchronously

它被描述为使用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,您可能想将此标记为重复,但是我认为我的问题与那有些不同。