为什么只有在登录时,javascript才能运行?

时间:2015-03-24 作者:Ramiro

我正在尝试实现一个简单的脚本:

jQuery(document).ready(function($){
$(window).scroll(function(){
    if($(window).scrollTop() >= $(\'#masthead\').outerHeight()) {
        $("#masthead").addClass("minimize");
    } else{
        $("#masthead").removeClass("minimize");
    }
});
});
当用户登录到WP时,它可以完美地工作。对于普通用户,脚本将加载到页脚中,但不执行任何操作。

我还从控制台收到此错误:

Uncaught ReferenceError: jQuery is not definedfixed-menu.js?ver=20150318:1 (anonymous function)
PD:我用过wp_enqueue_script 在我的functions.php 就像我处理任何其他外部js一样:

function nevermind_scripts() {
    wp_enqueue_style( \'nevermind-style\', get_stylesheet_uri() );

    wp_enqueue_style( \'nevermind-google-fonts\', \'http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,900,300italic,400italic|Droid+Serif\');

    wp_enqueue_style( \'nevermind-font-awesome\', \'http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css\');

    wp_enqueue_script( \'nevermind-navigation\', get_template_directory_uri() . \'/js/navigation.js\', array(), \'20120206\', true );


    wp_enqueue_script( \'nevermind-fixed-menu\', get_template_directory_uri() . \'/js/fixed-menu.js\', array(), \'20150318\', true );

}
add_action( \'wp_enqueue_scripts\', \'nevermind_scripts\' );

3 个回复
最合适的回答,由SO网友:Ciprian 整理而成

尝试:

wp_enqueue_script( \'nevermind-navigation\', get_template_directory_uri() . \'/js/navigation.js\', array(\'jquery\') );
jQuery可能没有排队,并且您没有将其声明为脚本的依赖项。登录后,jQuery会自动排队。

EDIT: 控制台日志显示jQuery is not defined. 您是否添加了jQuery(document).ready($) 固定菜单的功能。js函数?

SO网友:kaiser

CDN、远程资源和跨源请求http: 首先为您的CDN。这可能是因为在使用时存在跨源请求问题。省略协议允许浏览器根据情况选择正确的协议。固定协议通常是Chrome中的一个问题,“过度保护的父级”。

JavaScript中的依赖项注入(Dependency Injection)light除此之外,还可以测试是否加载了某些依赖项。通过将其检查到一个自调用函数中并将其记录到控制台,可以很容易地做到这一点:

( function( $ ) {
    "use strict";
    console.log( $ );
} )( jQuery || {} );
这意味着你要么得到全部jQuery 对象已记录,或者如果未能足够早地加载,则{}/空对象。如果是后者,那么您可以按照@Ciprian的建议:在注册/排队脚本时添加依赖项:

wp_enqueue/register_script(
    $handle,
    plugin_dir_url( __FILE__ ).\'assets/js/script.js\',
    array( \'jquery\' ),
    filemtime( plugin_dir_path( __FILE__ ).\'assets/js/script.js\' ),
    true
);
如果您不确定得到的是什么,您可能希望对URL/路径转储使用以下函数之一

  • get_template_directory() - 父主题根目录的路径get_stylesheet_directory() - 子主题根目录的路径get_template_directory_uri() - 父主题根目录的URLget_stylesheet_directory_uri() - 指向子主题根目录的URLplugin_dir_path( __FILE___ ) - 当前文件的根目录,无论是在子/父主题还是插件中。尾部斜杠结果
  • plugin_dir_url( __FILE__ ) - 当前文件的根目录-在插件中。尾部斜杠结果
PROTip: 使用“文件上次修改时间”/filemtime(), UNIX时间戳作为版本号/查询参数,用于按需突破浏览器缓存。

SO网友:danlynn

彼得·古森(PieterGoosen)提出的检查插件的建议对我起到了作用。是由Fast Velocity Minify插件引起的。清除缓存也不起作用,唯一可以绕过它的方法是禁用插件,并在开发完成后重新启用它。

结束