簡體   English   中英

Safari和Chrome無法動態評估添加<script> tag at page load

[英]Safari and Chrome doesn't evaluate dynamically added <script> tag at page load

我正在編寫小的JavaScript代碼,它將在html頁面加載時加載外部js文件。

我測試了2種方法。

情況1:使用document.write添加<script>標記。 它適用於所有瀏覽器(IE,FF,Safari,Chrome,Opera)。

情況2:使用DOMElement.appendChild將<script>標記添加到<haed>元素。

僅適用於IE,FF和Opera。 不適用於Safari和Chrome。

在這兩種情況下,我都希望在<head>結束標記之前插入新的<script>標記。 因此,在處理<body>之前將評估新的<script>標記,並且在調用window.onload時,“ success”變量應為true。

但這不適用於Safari和Chrome。

誰能告訴我這是否應該工作? 謝謝。

<html>
  <head>
    <title>JavaScript loading test</title>
    <script type="text/javascript">
      var success = false;

      window.onload = function()
      {
        document.getElementById("result").innerHTML = success? "OK": "ERROR!";
      }

      // TEST CASE 1.
      // Works for all browsers.
      document.write('<script type="text/javascript" src="foo.js"></' + 'script>');

      // TEST CASE 2.
      // Only works for Opera, FireFox, Opera.
      // var scriptElem = document.createElement("script");
      // scriptElem.setAttribute("type", "text/javascript");
      // scriptElem.setAttribute("src", "foo.js");
      // var headElem = document.getElementsByTagName("head")[0];
      // headElem.appendChild(scriptElem);
    </script>
    <!-- expected new scrip tag being inserted here. -->
  </head>
  <body>
    Testing...<br/>
    <span id="result"></span>
  </body>
</html>

“ foo.js”只是一行代碼。

success = true;

嘗試以下方法:

var s = document.createElement('SCRIPT');
s.charset = 'UTF-8';
s.src ='foo.js';
document.getElementsByTagName('HEAD')[0].appendChild(s);

但這要放在BODY標簽開頭的SCRIPT標簽中

在評估您的JavaScript時,尚未完全構建DOM,甚至還沒有完成head元素。 在HTML頁面完全加載之前,您通常無法訪問或操縱DOM( getElementsByTagNameappendChild等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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