簡體   English   中英

為什么我的javascript只在代碼重復時觸發?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM