简短版:“如何#include
在 JavaScript 中合成语句?”
长版:
我有一个 JavaScript 代码文件,我希望能够将其添加到一般网页中,而不会对这些页面施加任何特定条件,而不仅仅是它们必须包含 <script> 标记来加载我的文件。
我的文件包含依赖 jQuery 的代码,因此我需要从我的文件中加载 jQuery。我通过在 DOM 中插入一个 <script> 标签来做到这一点。问题是我需要在加载 jQuery 时立即运行一些代码,这样我才能确保,如果页面已经加载了旧版本的 jQuery,它不会被我新加载的 jQuery 覆盖(即我我参考$
然后调用jQuery.noConflict(true);
)。
为了尝试实现这一点,我向动态插入的 <script> 元素添加了一个 onload/onreadystatechange 处理程序。这基本上是可行的,但问题是如果底层页面有任何等待页面准备就绪(即$.ready(...)
),则此代码会在 <script> 元素本身的处理程序之前运行,因此当该代码与我一起运行时,事情会中断新加载的 jQuery 版本,而不是页面加载和代码预期的原始版本。
var script = document.createElement("script");
script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
script.type = "text/javascript";
script.onload = script.onreadystatechange = function() {
if (this.readyState && this.readyState != "loaded" &&
this.readyState != "complete")
return;
var $ = jQuery;
jQuery.noConflict(true);
do_my_stuff($);
}
document.getElementsByTagName("body")[0].appendChild(script);
请注意,我无法控制从中调用我的代码的网页,因此“使页面加载正确版本的 jQuery”不是解决方案。此外,简单地将 jQuery 内联到我的代码文件中并不是一个很好的解决方案,因为 jQuery 相当大(并且仅使用必要的功能重新构建它仍然会导致文件相当大)。