Javascript DOM инспекционный код Doent работает на IE - PullRequest
2 голосов
/ 26 октября 2010

этот вопрос для экспертов JS там.

Я использую следующий фрагмент кода, чтобы получить все имена функций JavaScript, которые существуют в корне dom.

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

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

Хотя этот код отлично работает в Firefox и Chrome, он не работает в IE8. Кажется, что функции не существуют под элементом окна в IE.

Есть ли у вас какие-либо идеи, как мне заставить его работать на IE? Спасибо!

Ответы [ 3 ]

0 голосов
/ 26 октября 2010

Относительно собственных методов: в 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 голосов
/ 26 октября 2010

Вы можете использовать typeof(), чтобы напрямую узнать, является ли это функцией, вместо того, чтобы преобразовывать ее в строку:

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

(обратите внимание, я преобразовал ее в строку для alert(), чтобы вы могли видеть, что она все еще делает то же самое; в зависимости от того, что вы хотите сделать, вам может даже не понадобиться это делать)

0 голосов
/ 26 октября 2010

Не удалось найти ни одного аналога IE8, но вы можете использовать этот код, чтобы прочитать необработанное содержимое JS на странице и проанализировать его, чтобы найти там какие-либо функции:

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

Не элегантно, какчто предлагает Chrome или FF, но он все еще будет работать .. надеюсь, кто-то может прийти с лучшим путем, хотя.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...