0

我试图在加载时阻止或出列页面的所有脚本,当用户执行任何事件(如单击、滚动或 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();
});
4

0 回答 0