javascript dom检查代码在IE上不起作用

时间:2010-10-26 12:18:26

标签: javascript dom internet-explorer-8

这个问题是针对JS专家的。

我使用下一段代码来获取dom根目录下存在的所有JavaScript函数名称。

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

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

虽然此代码在Firefox和Chrome上运行良好,但它似乎无法在IE8上运行。 似乎IE中的窗口元素下不存在这些函数。

你知道如何让它在IE上运行吗? 谢谢!

3 个答案:

答案 0 :(得分:0)

无法找到任何与此相当的IE8,但您可以使用此代码读取页面中的原始JS内容并解析它以查找其中的任何函数:

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

不像Chrome或FF提供的那样优雅,但它仍然有用..希望有人可以更好的方式来。 :)

答案 1 :(得分: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模式下运行,否则 Window (大写W)将是未知的。

如果明确指定给窗口对象,则用户创建的函数应该可用。

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

答案 2 :(得分:0)

您可以使用typeof()直接查找它是否为函数,而不必将其转换为字符串:

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

(请注意,我已将其转换为alert()的字符串,因此您可以看到它仍在执行相同的操作;根据您的目标,您甚至可能不需要这样做)