layui弹窗中动态执行脚本需绕过html转义限制:必须用success回调手动创建script节点并append,或调用预定义全局函数;innerhtml插入script无效。

在Layui弹窗打开后动态插入并执行一段脚本,需绕过Layui对content内容的HTML转义限制,确保script标签不被过滤且能触发执行。
确认弹窗content来源类型
若使用content: '<div>...</div>'字符串方式传入,Layui默认会调用layui.$()解析,但会剥离<script></script>标签;必须改用DOM节点或回调函数方式注入。
若content是已存在的DOM节点(如content: document.getElementById('myTpl')),其内部script标签在append进弹窗body后仍不会自动执行——浏览器原生机制决定:通过innerHTML或appendChild插入的script不会运行。
方法一:用success回调+手动创建script节点
第一步:调用layer.open(),在success回调中获取弹窗主体DOM。
第二步:在回调内用document.createElement('script')创建脚本节点,设置textContent或src属性,再append到弹窗内容区(如.layui-layer-content)。
第三步:执行完毕后,该脚本立即运行。注意:不能用innerHTML += '<script>...</script>',这会导致script被忽略。【script必须通过document.createElement创建并显式append才可执行】
方法二:将脚本逻辑封装为函数,在success中直接调用
把要执行的逻辑提前定义为全局函数(如window.initPopupHandler = function(){...})。
在success回调里直接调用该函数:initPopupHandler();。
这一步最轻量,无DOM操作风险,适合纯JS逻辑,不涉及动态加载外部资源。
方法三:用jQuery的.html().replace()配合eval(仅限调试,生产禁用)
先用$('.layui-layer-content').html()获取当前HTML字符串。
用replace()在合适位置插入<script>...</script>片段,再重新.html()写回。
最后用eval()执行提取出的脚本内容。⚠️【eval存在严重XSS风险,且无法访问闭包变量,仅限本地快速验证逻辑】











