2013-05-11 99 views
2

我創建一個網站,其中一些頁面包含至少一個媒體播放器,並且由於頁面大小的限制,我只想在媒體頁面中加載媒體播放器JavaScript文件。我將媒體信息存儲在頁面頭部的javascript對象中,其他腳本文件正在加載到主體的末尾。有條件地加載JavaScript的資源

我發現this solution(使用$.getScript)非常好,但我想要一個不依賴於任何框架的解決方案。我看到jQuery網站一個有趣的實施,我改成了這樣:

<script>typeof(player) != 'object' || document.write(unescape('%3Cscript src="/assets/js/player/mediaplayer/jwplayer.js"%3E%3C/script%3E'));</script> 

,它就像一個魅力,但因爲我不是親在JavaScript我想知道如何工作的呢?

  • 如果我們沒有對象類型的變量,那麼不需要檢查第二個條件嗎?
  • 其他瀏覽器如何處理此代碼?
  • 是否所有人(甚至更老的IE)都跳過第二個條件,或者他們可能會檢查所有條件?
  • 有跨瀏覽器行爲的更好的解決方案嗎?
+0

有沒有辦法可以做到這一點的服務器上?似乎更容易。 – mccannf 2013-05-11 19:08:59

+0

@mccannf用php檢查js對象?解析html輸出來加載一個js文件?你確定它快嗎? – 2013-05-11 19:10:42

+1

如果首先由php生成html,則不需要解析。只要包含媒體對象,它就可以包含所需的'

2

使用更標準的方法來裝載:

jQuery的

使用getScript

if (typeof player != "object") { 
    $.getScript("/assets/js/player/mediaplayer/jwplayer.js"); 
}; 

原始的JavaScript

function loadScript(path) { 
    var script = document.createElement("script"); 
    script.src = path; 
    script.type = "text/javascript"; 
    // changed "target" to "head" 
    var head = document.getElementsByTagName("head")[0]; 
    head.appendChild(script); 
}; 

然後在你的代碼:

if (typeof player != 'object') { 
    loadScript("/assets/js/player/mediaplayer/jwplayer.js"); 
}; 
+0

在我的問題中,「這個解決方案」指的是getScript,正如我所描述的,我可能想在加載jQuery之前加載js文件,並且我想要一個不使用任何框架的解決方案。無論如何,你的原始js解決方案似乎很有趣,+1。 – 2013-05-11 20:15:22

+0

@commadelimited有人更新了帖子,原因未知。 – flavian 2014-02-19 23:07:19

+0

我是更新帖子的人。我意識到我應該這樣做,而不是留下評論。 – commadelimited 2014-02-20 18:30:10