我试图在加载时阻止或出列页面的所有脚本,当用户执行任何事件(如单击、滚动或 keydown)时,然后重新加载或重新排队所有脚本。我正在使用 javascript 来检测事件,当发生任何事件时,我会进行 AJAX 调用以访问 php 代码并将脚本排入队列。我可以使脚本出队,但我无法再次将它们入队。这是我的代码:
// 用于删除脚本
add_action('wp_print_scripts', 'remove_all_scripts_ir');
function remove_all_scripts_ir(){
global $wp_scripts;
$oldScripts = $wp_scripts->queue;
if(!is_admin()){
// Dequeue All Scripts
$wp_scripts->queue = array();
echo "<input type='hidden' name='reload-scripts' value='".wp_json_encode($oldScripts)."' id='reload-scripts' />";
?>
<script>
scripts = document.getElementById("reload-scripts").value;
window.addEventListener("click",function(){
<?php echo "console.log('clicked_php')"; ?>
postAjax("<?= admin_url("admin-ajax.php") ?>", { scripts:scripts,action:"ir_reload_scripts" }, function(data){ console.log(data); });
});
function postAjax(url, data, success) {
var params = typeof data == 'string' ? data : Object.keys(data).map(
function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
).join('&');
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
};
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(params);
return xhr;
}
</script>
<?php
}
}
这是重新加载脚本的代码
add_action( "wp_ajax_nopriv_ir_reload_scripts", function(){
$scr = $_POST["scripts"];
$scrNew = str_replace("\\\"","\"",$scr);
echo $scrNew;
$scripts = json_decode($scrNew);
add_action( "wp_print_scripts",function() use ($scripts){
global $wp_scripts;
$wp_scripts->queue = $scripts;
});
die();
});