Figured it out, 对于任何其他遇到这个问题的人来说,这里是它的自上而下。插件本身正在使用DOMContentLoaded
(正如@JacobPeattie), 在插件的初始化脚本中。
所以我创建了一个没有DOMContentLoaded
函数包装器,并将其转储到服务器上另一个文件名下的永久文件夹中(reinitPlugin.js
).
那么什么时候reinitGallery();
被Barba解雇了。js转换,我使用.remove()
并仅在需要呈现插件内容的页面上重新添加核心样式和脚本标记(/gallery
).
简单地对初始化脚本执行相同的“交换/替换”操作无法正常工作,没有控制台错误,根本没有触发,文件本身在DOM中更新,只是没有骰子。由于Barba。js作为PJAX,我决定尝试.ajax()
函数加载脚本并将其包装到setTimeout()
确保它在其他脚本渲染完毕后加载,瞧。
Working Code:
function reInitGallery() {
jQuery("#plugin-css").remove();
jQuery("#plugin-js").remove();
jQuery("#plugin-js-after").remove();
if (window.location.href.indexOf("gallery") > -1) {
// reinit css
jQuery(\'head\').append(\'<link rel="stylesheet" id="plugin-css" href="/plugins/plugin/css/plugin.css" type="text/css" media="all" />\');
// reinit js
var pluginReplacementScript = document.createElement(\'script\');
fwds3dcovReplacementScript.type = \'text/javascript\';
fwds3dcovReplacementScript.id = \'plugin-js\';
fwds3dcovReplacementScript.src = \'/wp-content/plugins/plugin/js/plugin.js\';
document.body.appendChild(pluginReplacementScript);
// reinit js after
setTimeout(function() {
jQuery.ajax({
url: \'/wp-content/plugins/plugin/js/reinitPlugin.js\',
dataType: "script"
});
}, 300);
}
}