<script>
标记的解决方案当使用jQuery操作DOM时,特别是使用.html()
、.append()
等方法时,jQuery会默认解析并执行<script>
标签,而不是保留原始标签。这是jQuery的安全机制之一,旨在防止XSS攻击。
jQuery删除<script>
标记的主要原因包括:
<script>
内容而非保留原始标签<script>
标签// 使用.text()方法而不是.html()
$('#container').text('<script>alert("test");<\/script>');
// 将<script>转义为<script>
var scriptContent = '<script>alert("test");<\/script>';
scriptContent = scriptContent.replace(/</g, '<').replace(/>/g, '>');
$('#container').html(scriptContent);
// 使用原生DOM方法而不是jQuery
var container = document.getElementById('container');
container.innerHTML = '<script>alert("test");<\/script>';
var htmlString = '<div><script>alert("test");<\/script></div>';
var parsed = $.parseHTML(htmlString, document, false); // 第三个参数keepScripts设为false
$('#container').append(parsed);
// 存储脚本内容在data属性中
$('#container').data('script-content', 'alert("test");');
// 需要时再取出执行
var scriptContent = $('#container').data('script-content');
eval(scriptContent); // 注意eval的安全风险
.getScript()
方法以上方法可以根据具体需求选择使用,每种方法都有其适用的场景和限制。
没有搜到相关的文章