2010-10-26 18 views
2

這個問題是針對那裏的JS專家的。javascript dom檢查代碼doent在IE上工作

我使用下一段代碼來獲取dom根下存在的所有JavaScript函數名稱。

for(var x in window){ 
     val = ""+window[x]; 

     if(startsWith(val,"function")){ //only functions 
      alert(val) 
     } 
    } 

儘管此代碼在Firefox和Chrome上運行完美,但它似乎無法在IE8上運行。 看來好像這些函數在IE中的窗口元素下不存在。

你有什麼想法我將如何使它在IE上工作? 謝謝!

+1

你在這裏有什麼打算?你想列出本地函數,還是隻列出在JavaScript中聲明的函數? – 2010-10-26 12:31:42

+0

我想要一個兩個實際列表。這就是我上面寫的代碼所做的。 – 2010-10-26 12:58:03

回答

0

找不到任何相當於IE8的,但你可以使用此代碼來讀取網頁的原始JS內容,並對其進行分析,以尋找在那裏的任何功能:

var arrScripts = document.getElementsByTagName("script"); 
for (var i = 0; i < arrScripts.length; i++) 
    alert(arrScripts[i].innerHTML); 

不優雅的什麼鉻或FF提供,但它仍然會工作..希望有人能以更好的方式來。 :)

+0

這確實不會做同樣的事情。在JS中解析出JS將會很複雜,並且可以動態地添加函數,這不會通過解析腳本標記來顯示。同時引用'innerHTML'不會捕獲外部加載的JS腳本。 – 2010-10-26 13:01:31

+0

我知道這是不一樣的,只是這樣做可能足以滿足OP的需求。 – 2010-10-26 13:03:34

0

關於本機方法: 在IE8中,你可以訪問Window.prototype,讓他們:

<html> 
<head> 
<meta http-equiv="X-UA-Compatible" content="IE=100" > 
<title>Test</title> 
</head> 
<body> 
<ul style="font:normal 12px monospace;"> 
<script type="text/jscript"> 
<!-- 
try{ 
var win=Window.prototype; 
for(var k in win)document.write('<li><strong style="color:blue">'+k+':</strong>'+win[k]+'</li>'); 
}catch(e){alert('[Window.prototype] not supported');} 
//--> 
</script> 
</ul> 
</body> 
</html> 

注意,IE8已經在IE8模式下運行,否則窗口(大寫W)將是未知的。

如果明確指定給窗口對象,用戶創建的函數應該可用。

a=function(){}//will not work 
function b(){}//will not work 
window.c=function(){}//this will work 
+0

感謝您的回答。但是,如果我使用window.c = function(){},這也將在我已經顯示的第一個示例中工作。但這還不夠好。無論如何感謝您的嘗試。 – 2010-10-26 16:23:45

0

您可以使用typeof()找出直接不管它是一個功能,而不是將其轉換爲字符串:

for(var x in window){ 
     val = window[x]; 
    if(typeof(val)=="function"){ //only functions 
     alert(""+val); 
    } 
} 

(注意,我已經將它轉換爲字符串的alert()所以你可以看到它仍然在做同樣的事情;取決於你打算做什麼,你可能甚至不需要那樣做)

+0

這裏的問題不在於確定它是否是一個函數,本地函數和用戶函數在瀏覽窗口對象時不會在IE中可用。 – 2010-10-26 15:58:50

+0

呵呵。真?我很驚訝。我認爲這個問題肯定是他的'startsWith()'函數的一個問題,因爲我甚至希望IE能夠說'window [myglobalfunctionname]()'並讓它運行,所以它們都應該在窗口對象。無論如何....我不知道.... *聳聳肩* – Spudley 2010-10-26 16:20:38

+0

這是它的奇怪的事情。如果我添加這個:function fff(){}到我的網頁。比這個:窗口['fff']實際上也適用於IE。但是,上面的代碼仍然不會在IE中返回fff(僅限於Firefox和Chrome)。 – 2010-10-26 16:45:22

相關問題