[英]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.