问题描述
任何人都可以解释为什么会有不断的通知
JQMIGRATE: Migrate is installed, version 1.4.0
当我将主题更新为 WordPress 4.5 时,我的控制台中指向 load-scripts.php
,它如何被删除?
这不是一个错误,但它总是存在于我的控制台中,我真的不明白它的意义在哪里?我应该更新一些东西,对我的代码进行一些修改吗?
也许我有一点 ocd,但通常当我检查的网站,我喜欢看错误和真实的通知,指出我的控制台中的一个问题…
最佳解决方案
WordPress 使用 jQuery 迁移脚本确保您可能正在使用哪些使用从较新版本的 jQuery 中删除功能的任何插件或主题的向后兼容性。
随着 WordPress 4.5 的发布,它似乎已经升级了从 v1.2.1 到 v1.4.0 的 jQuery 迁移的版本 – 快速扫描通过代码显示 v1.4.0 日志脚本被加载,无论 migrateMute
选项是否设置并且在未压缩和最小化的版本中。
删除通知的唯一方法是确保您的所有插件/主题代码不依赖任何旧的 jQuery 功能,然后删除迁移脚本。有一个 plugin 在这里做,但这是一个很简单的方法,可以放在你的主题的功能文件或类似的:
add_action( 'wp_default_scripts', function( $scripts ) {
if ( ! empty( $scripts->registered['jquery'] ) ) {
$scripts->registered['jquery']->deps = array_diff( $scripts->registered['jquery']->deps, array( 'jquery-migrate' ) );
}
} );
请注意,这不是 WordPress 开发的最佳做法,在我看来,迁移脚本不应该仅仅是为了保持开发者控制台的清洁。
次佳解决方案
您可以在 jquery-migrate.min.js
中将日志消息文本更改为空白,但是在核心更新时不会保留该文本。
另一种方法是将 console.log
的直通/过滤功能副本添加到迁移脚本加载之前,并将其忽略包含 「Migrate is installed
」 的日志记录消息。这样做会保留其他迁移警告:
// silencer script
function jquery_migrate_silencer() {
// create function copy
$silencer = '<script>window.console.logger = window.console.log; ';
// modify original function to filter and use function copy
$silencer .= 'window.console.log = function(tolog) {';
// bug out if empty to prevent error
$silencer .= 'if (tolog == null) {return;} ';
// filter messages containing string
$silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
$silencer .= 'console.logger(tolog);} ';
$silencer .= '}</script>';
return $silencer;
}
// for the frontend, use script_loader_tag filter
add_filter('script_loader_tag','jquery_migrate_load_silencer', 10, 2);
function jquery_migrate_load_silencer($tag, $handle) {
if ($handle == 'jquery-migrate') {
$silencer = jquery_migrate_silencer();
// prepend to jquery migrate loading
$tag = $silencer.$tag;
}
return $tag;
}
// for the admin, hook to admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}
结果是添加到前端和后端的一行 HTML 脚本实现了所需的效果 (防止已安装的消息) 。
第三种解决方案
这里只是一点点测试。
我偷看了 jquery-migrate.js,注意到这部分:
// Set to true to prevent console output; migrateWarnings still maintained
// jQuery.migrateMute = false;
所以我用新的 wp_add_inline_script()
测试了以下版本,在 4.5 版本中引入:
add_action( 'wp_enqueue_scripts', function()
{
wp_add_inline_script(
'jquery-migrate', 'jQuery.migrateMute = true;',
'before'
);
} );
这将改变:
JQMIGRATE: Migrate is installed with logging active, version 1.4.0
至:
JQMIGRATE: Migrate is installed, version 1.4.0
所以它实际上并没有阻止所有的控制台输出,像 jquery-migrate.js
这样的部分:
// Show a message on the console so devs know we're active
if ( window.console && window.console.log ) {
window.console.log( "JQMIGRATE: Migrate is installed" +
( jQuery.migrateMute ? "" : " with logging active" ) +
", version " + jQuery.migrateVersion );
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。