0

我有一个旧的验证表单,它取决于prototype.js 库。

不幸的是,我不能在页面上包含对prototype.js 库的引用。我不控制该表单的代码。

在编辑需要它的页面之外,我将如何解决加载这个问题?也就是说,我需要从我控制的另一个 JavaScript 库中加载该。让我解释。

带有表单的每个页面都有这个包含脚本:

<script src="http://domain/validationScript.js"
    type="text/javascript"></script>

在脚本中,我正在考虑做这样的事情......

document.write(unescape(
    "%3Cscript src='//ajax.googleapis.com/ajax/libs/prototype/1.6.1/prototype.js' type='text/javascript'%3E%3C/script%3E"
  ));

但它不会prototype.js在脚本之前加载。

我究竟做错了什么?


好的,很明显 DOM 序列有一个竞争条件,我不能在将包含写入页面的脚本中使用加载的脚本。

但是,如何从脚本加载库,该脚本本身需要执行它正在加载的库中的代码?

4

2 回答 2

1

您正在 DOM 中生成一个新的脚本元素,下一个可以添加的元素。

此点位于当前脚本元素之后。

当前脚本元素中的任何代码都不能使用它,因为在当前元素的执行完成之前不会加载它。

由于您使用的是 jQuery,因此您可以使用getScript(),它允许您传递回调方法。将任何依赖于动态加载脚本的代码移到回调中。

于 2012-10-08T16:01:52.540 回答
-1

您应该将脚本添加到 dom 的头部:

var headID = document.getElementsByTagName("head")[0];         
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://ajax.googleapis.com/ajax/libs/prototype/1.6.1/prototype.js';
headID.appendChild(newScript);
于 2012-10-08T15:54:19.800 回答