2016-08-25 85 views
1

有點新手問題,但獲得列表中所有JS文件全名路徑的最佳方式是什麼?獲取網頁上加載的所有JS文件的列表

澄清:我有一個頁面www.mypage.com - 我想獲得所有JS文件的列表,其全名路徑在本頁面加載。

+1

對於當前頁面或所有頁面?當前頁面,打開開發工具查看網絡選項卡,篩選腳本。或者querySelectorAll並遍歷集合。如果整個網站,這意味着寫一個蜘蛛。 – epascarello

+0

當前頁面...我做到了,但沒有一個簡單的方法來同時複製所有數據 –

回答

1

你應該先把所有的腳本標記::

var scripts = document.getElementsByTagName('script'); 

然後遍歷它:

for(var i=0;i<scripts.length;i++){ 
scripts[i].src; 
} 
+2

幾乎沒有幫助,並且絕對不完整。 XHR呢? – Amit

+0

@Amit:更好的解決方案? –

+0

@Jonasw - 問題很難定義海事組織,沒有好的答案存在。 – Amit

1

類似的東西將在現代瀏覽器與ECMAScript的6支持做。但是,某些腳本可能會刪除其適當的標籤,這些標籤會將其隱藏在該列表中。

var jsFilePaths = Array.prototype.slice 
    .apply(document.querySelectorAll('script')) 
    .filter(s => s.src) 
    .map(s => s.src); 

使用正常for週期如果lambdas不是選項。

通過一些數據加載方法(如XHR或JSONP)加載並通過evalnew Function執行的腳本也不會顯示出來。

如果您需要攔截和記錄XHR時,你不必所有XHR時都做了集中的地方,你可能需要重寫XMLHttpRequest並添加一些邏輯到其readystatechange事件檢查接收到的響應是否爲可執行的JavaScript,請參閱此問題以獲取更多信息:How to easily listen for xhr requests with javascript?

如果您需要攔截時<script>被添加到DOM或有其src屬性操作,您可以使用DOM MutationObserver,看到an MDN article以獲取更多信息的所有情況。

您可能還需要攔截document.write並查看某些腳本是否添加了更多的內聯腳本。此外,像<img/>這樣的非腳本元素也可以運行腳本,就像在着名的XSS黑客<img src="http://nonexistent.url/x.png" onerror="alert('xss!')" />中一樣。

此外,重要的是要注意,任何此類XHR攔截,特別是DOM突變事件和DOM MutationObserver的使用對頁面的性能有害,有時相當明顯。

+0

Sooo,不可能吧?這使得這個答案毫無意義,你不覺得嗎?只需發表評論。 – Amit

+0

@Amit。親愛的主席先生,請原諒我幫助OP的卑微努力。不,這不可能是不可能的,這很難做到。我在我的文章中添加了信息。但是,據我所知,StackOverflow上的答案應該是一種可行的方法,而這並不總是一個完整的代碼解決方案。 –

+0

這是一個更好的答案。就我個人而言,我仍然認爲最重要的事情是沒有保證的方法來實現這一點,但你確實覆蓋了最重要的部分。 – Amit

相關問題