2013-08-29 40 views
1

我已經有了所有的工作,但是在添加一個外部JavaScript文件(順便說一下,只有幾行簡短的行)後,它會延遲popup.html的加載。如何在popup.html中異步加載外部JavaScript文件?

這個延遲很煩人,我想通過異步加載JavaScript文件,然後它會擺脫這種滯後。

該文件是寫在popup.html這樣的:

<script src="https://domain.com/myexternalscript.js"></script>

我不知道如何異步加載此文件。那我該怎麼做?

+0

你今天引用添加到母版頁您的網站或只是popup.html頁? – HaBo

+0

它只在popup.html頁面上。 – user2651403

+0

java腳本文件有多大?如果這是小事,將它添加到你的主頁面? – HaBo

回答

0

解決辦法有兩個:

  1. 移動腳本標籤到HTML頁面的結束。
  2. 在腳本標記上使用defer屬性,但舊版瀏覽器不支持該屬性。
+0

讓我試試。 ---更新:我添加了defer屬性並將腳本移動到頁面的末尾,但沒有區別,仍然延遲。 – user2651403

+0

不僅如此,而且添加了defer標籤使腳本無法使用。 – user2651403

0

延遲可能是因爲源是一個安全的http(https)請求,而不是簡單的香草http請求。根據您的特定託管計劃,這可能會或可能不會有所作爲。已經提出和陳述了一些論據和證據來支持這個概念,相反。

我不認爲異步加載文件將解決你的問題,因爲你會做出相同的http請求......這是AJAX所做的;它允許我們在不重新加載頁面的情況下從服務器請求信息。

如果它只是JS的幾行,那麼爲什麼不把它包含在你的.html文件中呢?

此外,您還沒有描述過您遇到的問題。也許你可以詳細說明一下?

+0

它需要是外部的。這樣我可以手動更新它在擴展名之外。不僅如此,但在popup.html中使用內聯javascript是不可能的,因爲谷歌已經禁用了此功能而無需求助。 ///問題是,在Google Chrome瀏覽器中點擊該擴展程序的彈出式按鈕時會出現延遲。我希望如果我可以在運行外部腳本之前加載彈出窗口(因此,在發出http請求之前),我希望能夠消除延遲。 – user2651403

+0

p.s.你是對的,它是導致延遲的http(s)請求,而不是javascript文件的大小。這就是爲什麼我希望延遲腳本執行直到頁面加載後。 – user2651403

+0

順便提一下,它必須是httpS。 IT需要爲了訪問popup.html中的外部JavaScript文件。你不能使用正常的http,否則我會的。 – user2651403

1

由於您正在爲Chrome開發,我的確瞭解加載前內聯腳本的問題。 我寫這AJAX(jQuery的)片段,希望你會發現它有用:

$.ajax({ 
      type: "GET", //or post? 
      url: "http://FOOBAR.COM", //change the url obviously.. 
      datatype: "script", //identify the expected income 
      async: "true", //async is "true" by default, but let's make sure it's #t 
      success: function(result) { 
       /**now we append the script to the document, nothing too special, 
        just pay attention we inject it INSIDE the item and not as the src**/ 
       var scr = document.createElement('script'); 
       scr.innerHTML = result; 
       document.body.appendChild(scr) 

      }, 
      error: function(result) { 
      //a simple error handling using the same method we used for the success 
       console.log(result) 
       var scr = document.createElement('script'); 
       scr.innerHTML = "alert('ERROR!')"; 
       document.body.appendChild(scr) 
      } 

     }); 
相關問題