我想使用 jQuery 将 JavaScript 片段添加到页面中的现有 iFrame 中。我有以下代码...
代码:
content = "<script>" + js_code + "</script>";
$('#iframe_id').contents().find('body').append(content);
但不知何故,这是行不通的。我检查了一些现有/相关的答案,似乎 jQuery 并没有完全将脚本标签识别为...脚本标签。 iFrame 在同一域/同一端口/同一主机中,因此不存在跨站点脚本等问题。我该如何解决这个问题?
最佳答案
问题是,如果您的脚本中包含关闭脚本标记 ( </script>
),HTML 解析器会感到困惑,并且它会过早地关闭脚本标记。
解决方案是逃避/
在"<\/script>"
.这是有效的,因为 JavaScript(和其他一些语言)中的字符串,任何无效的 escape sequences只是被忽略了,所以 "\l"
被视为 "l"
, 和 "\/"
被视为 "/"
.然而,HTML 解析器不使用反斜杠来转义它们,因此不会混淆(归功于 https://stackoverflow.com/users/405681/keaukraine )。
var scriptTag = "<script>alert(1)<\/script>";
$("#iframe").contents().find("body").append(scriptTag);
原始解决方案
拆分结束标记,这样您就不会搞乱 HTML 解析器。此页面上的其他解决方案有效,因为它们从来没有字符串 </script>
在他们的代码中(jsfiddle):
var scriptTag = "<script>alert(1)<";
scriptTag += "/script>";
console.log(scriptTag);
$("#iframe").contents().find("body").append(scriptTag);
或者 ( jsfiddle ):
var scriptTag = "<script>alert(1)<"+"/script>";
$("#iframe").contents().find("body").append(scriptTag);
关于javascript - 如何使用 jQuery 将 JavaScript 代码添加到现有的 iFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369410/