Код проверки DOM JavaScript Desent работает на IE
-
26-09-2019 - |
Вопрос
Этот вопрос для экспертов JS там.
Я использую этот следующий кусок кода, чтобы получить все имена функций JavaScript, которые существуют под корнем DOM.
for(var x in window){
val = ""+window[x];
if(startsWith(val,"function")){ //only functions
alert(val)
}
}
Хотя этот код отлично работает на Firefox и Chrome, не работает на IE8. Кажется, что функции не существуют под окном элемента в IE.
У вас есть идеи, как бы я сделал это на работу на IE? Спасибо!
Нет правильного решения
Другие советы
Не удалось найти какой-либо эквивалентный IE8, но вы можете использовать этот код для прочтения содержимого RAW JS на странице и разобрать его, чтобы найти какие-либо функции там:
var arrScripts = document.getElementsByTagName("script");
for (var i = 0; i < arrScripts.length; i++)
alert(arrScripts[i].innerHTML);
Не элегант, как о том, что предлагает Chrome или FF, но он все равно будет работать .. Надеюсь, кто-то может прийти с лучшим способом. :)
Вы можете использовать typeof()
Чтобы узнать непосредственно ли это функцию, а не преобразовать его в строку:
for(var x in window){
val = window[x];
if(typeof(val)=="function"){ //only functions
alert(""+val);
}
}
(Примечание, я преобразовал его в строку для alert()
Таким образом, вы можете видеть, что это все еще делает то же самое; В зависимости от того, что вы стремитесь сделать, вам не может даже сделать это)
Что касается нативных методов: в IE8 вы можете получить доступ Окно. Прототип Чтобы получить их:
<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