【发布时间】:2018-09-29 01:56:12
【问题描述】:
在一个 HTML 模板中,我发现以下两行代码用于加载外部脚本。第一个是 CDN 中非常熟悉的 jQuery 库,但第二个对我来说很奇怪。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-1.9.1.min.js"><\/script>')</script>
作为 WordPress 开发人员,我可以使用 wp_enqueue_script() 将第一个加入队列:
function scripts() {
wp_enqueue_script( 'jquery-latest', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js' );
}
add_action('wp_enqueue_scripts', 'scripts');
但我想知道,第二个怎么做?
所以我的问题是双重的:
- 那行代码是什么?是不是只有在 CDN 失败时才会触发回退?
- 如何在 WordPress 中将第二行排入队列但对其进行硬编码?
编辑
在@RobSchmuecker 的回答之后,我实际上明白了这一点。但实际上缺乏以这种方式寻求正确执行方式的经验,这是我的代码:
function scripts() {
wp_enqueue_script( 'jquery-latest', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' );
wp_localize_script( 'jquery-fallback', 'styleSheetURL', get_stylesheet_directory_uri() );
wp_enqueue_script( 'jquery-fallback', get_template_directory_uri() . '/js/jquery-fallback.js', array( 'jquery-latest' ) );
}
add_action('wp_enqueue_scripts', 'scripts');
我按照你的方式设置jquery-fallback.js,仅使用以下行:
window.jQuery || document.write('<script src="' + styleSheetURL + '/js/jquery-1.11.1.min.js"><\/script>');
文件层次结构是:
/ functions.php
/ js
/ jquery-1.11.1.min.js
/ jquery-fallback.js
但我无法从本地服务器加载 jQuery。
编辑 2
HTML 输出似乎正确。我从浏览器推测jquery-fallback.js 文件,它显示了前面提到的确切文件。但是我把路径改成了styleSheetURL + '/jquery-1.11.1.min.js。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js?ver=3.9.1"></script>
<script type="text/javascript" src="http://localhost/PROJECTDIRECTORY/wp-content/themes/MYTHEME/js/jquery-fallback.js?ver=3.9.1"></script>
但是控制台仍然说至少有 4 个依赖的 jQuery 调用被遗漏了。
【问题讨论】:
-
请你给我们你现在得到的 HTML 输出,只是你的
head应该做的。 -
@RobSchmuecker:再次编辑。
-
我认为这里发生的事情是在现在
asynchronous加载您的本地 jQuery 副本之前加载其他内容。如果此后有任何依赖项,您将遇到此问题。您还没有向我们展示您的 HTML 的全部。我看不到本地化发生在哪里,也看不到您的其他依赖项是什么以及它们的加载顺序。 -
也看看这个。 stackoverflow.com/questions/5257923/… 你需要确保你有
blablabla..jquery-1.11.1.min.js"><\/script>注意`\`