摘要:標簽通過獲取最后一個標簽的屬性來得到腳本文件的。這種方式只能在同一個文件中即時執行才有效,不能延遲執行及寫成通用的供其他地方調用,否則獲取到的不一定是哪個文件的了。
該文寫于 2013-08-22
在開發過程中,有時需要動態獲取文件的 URL,獲取 JS 文件的 URL 是最常見的需求,例如像 Sea.js 等 Module Loader 就會用到。
目前常被用到的有以下幾種方式,它們有各自的優缺點。
script 標簽通過獲取最后一個標簽的src屬性來得到腳本文件的 URL。這種方式的關鍵點是正在執行的語句所在的 JS 文件是“當時最后的 JS 文件”。Sea.js 中就是用的此方法。
正因如此,瓶頸也在這里。這種方式只能在同一個文件中即時執行才有效,不能延遲執行及寫成通用的 method 供其他地方調用,否則獲取到的不一定是哪個 JS 文件的 URL 了。不過這種方式的優點就是能夠兼容各個瀏覽器。
javascriptfunction scriptPath() { var scripts = document.scripts; var script = scripts[ scripts.length - 1 ]; return script.hasAttribute ? script.src : // hack for IE8- // see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx script.getAttribute( "src", 4 ); } var url = scriptPath();捕獲異常
這是一個從司徒正美的博文中看到的較為“聰明”的方法,利用了 exception 信息中會帶有出錯文件及位置的特點來獲取。
這種方式可以寫為一個通用的 method,但其還是有兩個較為嚴重的缺陷:
兼容性差,IE 和 Opera 基本都被排擠在外
在調用時必須在回調函數中拋出異常
javascriptfunction scriptPath( callback ) { var url = ""; if ( typeof callback === "function" ) { try { callback(); } catch( e ) { // Firefox if ( e.fileName ) { url = e.fileName; } // Safari else if ( e.sourceURL ) { url = e.sourceURL; } // Opera 9 else if ( e.stacktrace ) { url = (e.stacktrace.match( /() ins+(.*?://S+)/m ) || ["", ""])[1]; } // Chrome 4+/IE 10+ else if ( e.stack ) { url = (e.stack.match( /((http|file):/{2,3}S+/S+.[a-z0-9]+)/i ) || ["",""])[1]; } } } return url; } // must throw an exception var url = scriptPath(function() { throw Error( "WTF!!!" ); });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91515.html
摘要:在這樣的程序中,異步編程通常是有幫助的。最初是為了使異步編程簡單方便而設計的。在年設計時,人們已經在瀏覽器中進行基于回調的編程,所以該語言的社區用于異步編程風格。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目原文:Node.js 譯者:飛龍 協議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)...
摘要:對于客戶端應用來說,服務端渲染是一個熱門話題。在服務器預渲染初始應用狀態。重構這段腳本,使其可以在服務端運行。如果這些原因和你的情況吻合,那么使用進行服務端渲染將會是個不錯方案。我已經發布兩個庫來支持的服務端渲染和專為應用打造的。 showImg(https://segmentfault.com/img/remote/1460000014155032);對于客戶端應用來說,服務端渲染是...
摘要:讀不順中文文檔,對應中文文檔,自行翻譯的如果有問題錯誤,歡迎指點修改配置選項方法一在頂級頁面或頂級腳本文件沒有定義模塊的腳本文件中配置方法二在主模塊中配置缺點主模塊異步加載,多入口的話,會隨機報錯方法三在調用之前,將配置定義為全局變量配置在 讀不順中文文檔,對應中文文檔,自行翻譯的……如果有問題/錯誤,歡迎指點; 修改配置選項: 方法一、 requi...
摘要:下面我們撇開網絡方面的優化,只分析靜態資源方面的優化。不過,也會阻止的構建和延緩網頁渲染。未優化正常加載優化后異步加載根據上面的分析,我們可以清楚的認識到,非必要優先加載的,選擇異步加載是最優選擇。 為什么做優化 經典問題:白屏時間過長,用戶體驗差產生的原因:網絡問題、關鍵渲染路徑(CRP)問題 怎么做優化 如何做好優化呢,網上隨便一搜,就有很多優化總結,無非就是網絡優化、靜態資源(h...
閱讀 2923·2021-11-23 09:51
閱讀 3160·2021-11-12 10:36
閱讀 3204·2021-09-27 13:37
閱讀 3156·2021-08-17 10:15
閱讀 2586·2019-08-30 15:55
閱讀 2749·2019-08-30 13:07
閱讀 792·2019-08-29 16:32
閱讀 2642·2019-08-26 12:00