2010-09-23 3 views
0

Я запускаю JavaScript через eval (знаю, стреляю в меня), который в основном перечисляет все свойства объекта документа. Моя проблема заключается в том, что, хотя он работает в firebug, в Firefox он запускает исключение, исключенное из Firefox, при запуске из сценария.Проблема с прерывистым JavaScript

Link to JavaScript script, the exception thrown, and the firebug command working.

Любые предложения о том, что здесь происходит?

Для записи это делается на Firefox 3.6.10 на Ubuntu 10.04 64-bit, и хром не имеет этой проблемы.

+0

Зачем вам нужно снова использовать eval? –

+0

Эваль в пределах eval, я надеюсь, что у вас есть ограда хищника. – MooGoo

+0

Если бы у JavaScript был оператор goto, который я мог бы добавить ... – Michael

ответ

2

Ошибка здесь:

console.log(result); 

удалить эту строку и все должно быть хорошо.

Объект console - объект Firebug (относится к консоли Firebug). Safari/Chrome просто реализует объект console (относится к консоли Webkit js). Firefox, впрочем, другие браузеры не имеют консольного объекта. Поэтому он выдает ошибку.

BTW: Как обычно, оценки абсолютно не нужны. Это точно эквивалентный код:

for (key in document) { 
    result[i] = typeof document[key]; 
    result[i+1]="document."+key; 
    i+=2; 
} 

Если вы настаиваете на вызов его request затем использовать его в качестве ссылки:

var request = window.document; 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

Если вы настаиваете на переход имен объектов строки, то для использования ради Eval здравомыслия в в менее запутанным образом:

var string = "window.document"; 
eval("var request ="+string); 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

Хотя я бы не сделать еще что (иногда это необходимо, но только очень редко).

+0

Эваль необходим, поскольку имя объекта передается строкой, и нет никакого способа изменить это. Однако я, скорее всего, перейду на вашу последнюю рекомендацию. Но это не решает реальной проблемы, как если бы вы смотрели на исключение, это было неудачно на строке 53 test.js, которая является линией eval, а не линией console.log. – Michael

+0

Номера строк для сообщений об ошибках в eval() вызовах Firefox неверны. – johnjbarton

+0

Вы можете отключить панель Firebug Console (мини-меню на вкладке панели). Затем перезагрузите, и если проблема окончена, это произойдет. Также, если у вас есть запрос строки, который вы можете использовать для (var key в окне [request]). – johnjbarton

Смежные вопросы