我遇到了一个问题,如果我再重复一遍,我只能触发我的代码。请参阅以下示例。如果我将两个脚本中的任何一个用于代码几乎完全相同,那么代码只能用一个代码运行,但是如果我运行两个脚本就可以解决,但只有一个而不是两个。试一试。
这有效(但只有一个脚本会触发):
<script type="text/javascript">
var url = window.location.href + "";
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"/>');
</script>
<script type="text/javascript">
var url = window.location.href + "";
document.write('<script type="application/javascript" src="https://testdomain.com/mik?add=2140535&mik=' + url + '"/>');
</script>
这不起作用:
<script type="text/javascript">
var url = window.location.href + "";
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"/>');
</script>
或者这个:
<script type="text/javascript">
var url = window.location.href + "";
document.write('<script type="application/javascript" src="https://testdomain.com/mik?add=2140535&mik=' + url + '"/>');
</script>
有没有人有任何想法?这绝对是我一段时间以来见过的最奇怪的事情。
谢谢,
答案 0 :(得分:11)
问题是您的脚本标记已损坏。 <script>
代码必须由</script>
关闭
现在发生了这样的事情:
示例1
<script>
document.write('<script src="test.js"/>');
</script>
生成以下标记HTML:
<script>
document.write('<script src="test.js"/>');
</script>
<script src="test.js">
</body>
</html>
通常,浏览器在找到相应的<script>
之前不会执行</script>
阻止。上面的示例中没有明确的结束标记,因此浏览器会忽略标记。
示例2
<script>
document.write('<script src="test.js"/>');
</script>
This HTML will be consumed
<script>
document.write('<script src="test.js"/>');
</script>
产生以下输出:
<script>
document.write('<script src="test.js"/>');
</script>
<script src="test.js">
This HTML will be consumed
<script>
document.write('<script src="test.js"/>');
</script>
请注意,动态编写的脚本标记未关闭。浏览器会将此标记与标记中的第二个</script>
匹配;中间的一切(不正确)成为此标记的一部分。
<强>解决方案强>
使用document.write时,请确保正确关闭<script>
标记。但请注意,您不能在JavaScript代码中使用</script>
,因为它标志着脚本块的结束。您可以使用以下技巧:
<script>
document.write('<script src="test.js"><\/script>');
</script>
答案 1 :(得分:6)
我刚试过这个:
考虑来源
data:application/javascript;base64,Y29uc29sZS5sb2coIlRlc3QiKTs=
这指向以下代码:
console.log("Test");
下面的代码段生成
<script src="data:application/javascript;base64,Y29uc29sZS5sb2coIlRlc3QiKTs="/>
<div>A</div>
<script>
document.write('<script src="data:application/javascript;base64,Y29uc29sZS5sb2coIlRlc3QiKTs="/>');
</script>
<div>B</div>
&#13;
但是,下面的代码段会生成
<script src="data:application/javascript;base64,Y29uc29sZS5sb2coIlRlc3QiKTs="></script>
<div>A</div>
<script>
document.write('<script src="data:application/javascript;base64,Y29uc29sZS5sb2coIlRlc3QiKTs="></'+'script>');
</script>
<div>B</div>
&#13;
第一个代码段记录"Test"
,但在HTML 中不显示“B”。第二个正常工作。在Real-time HTML Editor中,第一个记录不记录"Test"
。这意味着<script/>
下面的所有HTML(插入为<script>
)都会被Salman A’s answer指出。
这是因为<script>
代码唯一有效的语法是<script></script>
而不 <script/>
。
答案 2 :(得分:3)
这有效:
<script type="text/javascript">
var url = window.location.href + "";
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"></scr'+'ipt>');
document.close();
</script>
为防止js崩溃,我将<script>
标记拆分为两个字符串。