jQuery替换移除type属性的Script标签后未执行,如何触发脚本?
浏览器首次解析<script type="text/plain">标签时,会判定这不是可执行的脚本类型,即便后续移除type属性,也不会重新触发脚本的加载与执行。针对你的场景(加载外部src脚本),推荐以下解决方案:
方法一:重新创建并插入标准脚本标签
直接提取原标签的核心属性,生成全新的<script>标签替换原节点,浏览器会自动加载并执行新标签指向的脚本:
jQuery('script[data-sid="extservice"]').each(function() { var $original = jQuery(this); // 创建新的script标签,保留原有的src和data-sid属性 var $newScript = jQuery('<script>') .attr('src', $original.attr('src')) .attr('data-sid', $original.attr('data-sid')); // 替换原标签 $original.replaceWith($newScript); });
方法二:仅适用于内联脚本的方案(外部脚本不适用)
如果是内联脚本(非src引用外部文件),可以移除type属性后手动执行脚本内容,但此方法对你的场景无效,仅作补充参考:
jQuery('script[data-sid="extservice"]').each(function() { var $script = jQuery(this); $script.removeAttr('type'); // 执行内联脚本内容 eval($script.text()); });
关键原因说明
克隆原标签的方式之所以无效,是因为浏览器只会对新插入DOM的script标签执行加载逻辑,已解析过的DOM节点(哪怕克隆修改)不会被重新识别为可执行脚本。
内容的提问来源于stack exchange,提问作者Arerrac
相关产品推荐
相关产品推荐

