通过 Javascript 添加和加载 Javascript 到浏览器,无需重新加载
Adding and Loading Javascript to a Browser via Javascript without reloading
我在 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 等任何浏览器,打开其 Developer Toolkit 并将该脚本键入控制台即可。网站无所谓。
感谢@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,您可能想将其标记为重复,但我认为我的问题与那个有点不同。
我在 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 等任何浏览器,打开其 Developer Toolkit 并将该脚本键入控制台即可。网站无所谓。
感谢@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,您可能想将其标记为重复,但我认为我的问题与那个有点不同。