[英]Why does my javascript only fire when the code is repeated?
我有一个问题,如果我重复它,我只能触发我的代码。 请参阅以下示例。 如果我把两个脚本中的任何一个用掉,那么代码几乎完全相同,但是如果我同时运行两个脚本,那么脚本就可以解决,但只有一个而不是两个。 搏一搏。
这有效(但只有一个脚本触发):
<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>
有没有人有任何想法? 这绝对是我一段时间以来见过的最奇怪的事情。
谢谢,
问题是您的脚本标记已损坏。 必须通过</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>
我刚测试过这个:
考虑来源
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>
但是,下面的代码片段会生成
<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>
第一个片段记录"Test"
但在HTML中不显示“B” 。 第二个正常工作。 在实时HTML编辑器中,甚至没有"Test"
记录第一个。 这意味着,当Salman A的 答案指出时, <script/>
(作为<script>
插入)下面的所有HTML都会消耗掉。
这是因为<script>
标记的唯一有效语法是<script></script>
而不是 <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 + '"></scr'+'ipt>');
document.close();
</script>
为了防止js崩溃,我将<script>
标记拆分为两个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.