我想在每次加载turbolinks时(即加载页面)执行几行js,而不是从缓存中执行js,但是每次都要在turbolinks加载事件之前强制运行它。这可能吗?
我试图通过隐藏html主体并在app.js.coffee中执行此操作来摆脱FOUC
$user_id = 1;
$user_info = get_userdata( $user_id );
$this_user_roles = $user_info->roles;
//For wp_delete_user() function
require_once(ABSPATH.'wp-admin/includes/user.php' );
if( in_array( "administrator", $this_user_roles) ) {
echo "This user is admin, cannot be deleted";
} else {
if( wp_delete_user( $user_id ) ){
echo "Success user deleted :)";
} else {
echo "There is a problem while deleting the user.";
}
}
但是FOUC在重新加载页面后第3或第4次开始启动。
要查看此动态,here是该网站的链接。
答案 0 :(得分:2)
Turbolinks仅在使用该页面上的链接时加载,而不是在刷新页面或通过URL导航时加载。如果要在加载页面时运行js,请使用$(document).ready(function() { executable js here });
答案 1 :(得分:1)
因此,FOUC加上turbolinks可能会非常恼人。我们最终修复它的方法是使用内联stye隐藏整个身体并在体内添加脚本标记:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("SlabFrom", typeof(int));
dt.Columns.Add("SlabTo", typeof(int));
dt.Columns["SlabTo"].AllowDBNull = true;
dt.Columns.Add("Rate", typeof(double));
dt.Rows.Add(new object[] {0,100,5.00});
dt.Rows.Add(new object[] {100,500,10.00});
dt.Rows.Add(new object[] {501,null,15.00});
int usage = 1500;
double cost = 0;
foreach(DataRow row in dt.AsEnumerable())
{
if(usage > 0)
{
if((row.Field<int?>("SlabTo") == null) || (usage < row.Field<int>("SlabTo")))
{
cost += usage * row.Field<double>("Rate");
usage = 0;
}
else
{
cost += (row.Field<int>("SlabTo") - row.Field<int>("SlabFrom")) * row.Field<double>("Rate");
usage -= (row.Field<int>("SlabTo") - row.Field<int>("SlabFrom"));
}
}
}
}
}
}
这确保了当turbolinks处于运行状态时,它仅加载HTML的主体,因此在主体内运行脚本时确保每次有turbolinks加载时js都会运行。