2012-08-27 64 views
1

可能重複:
How can I get the content of the file specified as the 'src' of a <script> tag?輸出一個JavaScript文件的內容作爲警告或登錄控制檯

這可能看起來像一個奇怪的問題,但它一直在我的腦海。假設我有一個引用一個或多個JavaScript文件的HTML文件,這些文件是本地文件,但可能是外部文件。現在由於某種原因(我自己的好奇心),我希望將這些文件之一的內容像字符串一樣輸出,並將其寫入控制檯,甚至將內容寫入alert。所以說,我有以下的JS文件調用jsFile.js:

// JavaScript Document 
var testString = "I am just an output... or am I", 
    testNumber = 1, 
    testArray = [], 
    testObject = {}; 

// random functionality, etc... etc... 
if(testNumber > 100){ 
    // do something... 
} 

,打開我的HTML頁面時,我想這個輸出像這樣:

alert image

但是我不確定該怎麼辦這個,我可以在dom中找到SCRIPT標籤,並使用它的方法輸出它的內容(見下文),或者我必須讀取文件(以某種方式),然後遍歷每行代碼並將其收集到一個變量中,然後通過alertconsole.log輸出它

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Hello World</title> 
</head> 
<script type="text/javascript" src="jsFile.js"></script> 
<script type="text/javascript"> 

// find the JS node... 
window.onload = function(){ 

    var theFile = document.getElementsByTagName("script")[0]; 

    // none of these will work as the code within the jsFile.js is not a DOM object... 
    console.log(theFile.text); // returns a zero length string 
    console.log(theFile.innerHTML); // returns a zero length string 
    console.log(theFile.textContent); // returns a zero length string 

} 

</script> 
<body> 
I am just a HTML file... no more, no less... 
</body> 
</html> 

以上是我的第一次嘗試,但是這些方法都不會工作,因爲腳本的內容不是DOM對象。我不需要一個代碼特定的答案,只是一個概念,想法或指向正確方向的證明。如果我沒有意義,請說出來,然後我將重新說明我的問題。

+0

請參閱問題是JavaScript代碼(該文件的內容)不會成爲HTML的一部分:它基本上與相同。所以沒有簡單的方法來獲取它(不使用AJAX,也就是說)。 ) – raina77ow

回答

3

您將需要對該腳本的URL發出AJAX請求,並顯示您想要的內容(只需抓住responseText),它是服務器端資源,返回的內容將是您的javascript: )

+0

_「假裝它是服務器端資源」_,它**是**服務器端資源。 – Adi

+0

@Adnan,是的,我的意思是在你無環境地調用''php','jsp','asp'頁面的情況下使用ajax。不是JavaScript或靜態html文件;假裝拿出來:) – epoch

+0

這個答案根本不正確:根據HTML 4規範,http://www.w3.org/TR/html4/types.html#type-script,用戶代理必須通過文件添加到腳本引擎,這意味着可以將它提供給JavaScript,但它們根本沒有。 – Kenney

0

儘管epoch本質上已經回答了這個問題,但是我被這個挑戰觸發了,我寫了一小段代碼將所有腳本資源轉儲到控制檯,前提是它們位於相同的域(來源)。我在Chrome中測試過它。

var f = function (src) { 
    var origin = location.origin || (location.protocol+'//'+location.hostname); 
    if (src.substr(0, origin.length) != origin) { 
     return; 
    } 
    x = new XMLHttpRequest(); 
    x.open("GET", src.substr(origin.length), true); 
    x.onreadystatechange = function() { 
     if (x.readyState == 4 && x.status == 200) { 
     console.log(x.responseText) 
     } 
    }; 
    x.send(); 
}; 
var s = document.getElementsByTagName('script'); 
for (var i = 0; i < s.length; ++i) { 
    f(s[i].src); 
}