Ecmascript / Javascript работает с Internet Explorer, но НЕ с FireFox. Почему? - PullRequest
0 голосов
/ 20 сентября 2011

У нас есть забавный пример того, как работает наш EcmaScript / JavaScript Obfuscator.Мы предоставляем ссылки, которые показывают необъяснимый и запутанный источник Ecmascript для «динамических часов».Когда вы нажмете кнопку «Пуск», вы увидите, что графические части часов следуют за вашими движениями мыши, а когда вы перестанете двигать мышь, они образуют тикающие круглые часы.

Смотрите здесь ... http://www.semdesigns.com/Products/Obfuscators/ECMAScriptObfuscationExample.html

Проблема в том, что как не запутанный, так и запутанный код хорошо работает с Internet Explorer, но не с FireFox.Так в чем же разница между EcmaScript для FireFox и Internet Explorer, которая приводит к тому, что этот код работает с Internet Explorer, а не с FireFox?Я пробовал это несколько версий Firefox, включая последнюю версию, и все терпят неудачу.

Ответы [ 4 ]

3 голосов
/ 21 сентября 2011

Первое место, которое нужно проверить, это «Консоль ошибок» или ваша консоль Firebug - обнаружение зависит от вашей версии Firefox и от того, установлен ли у вас Firebug.

Я сразу нашел это в консоли, когда пробовал вашу страницу:

Error: document.getElementById("mzSeconds" + i) is null
Source File: http://www.semdesigns.com/Products/Obfuscators/UnobfuscatedJavaScriptMouseClock.js.txt
Line: 19

Обновление

Обнаружив ошибку, а Декстер и jfriend00 указали, почему вы получаете ошибку в первую очередь, мы видим, что разница между IE и "всеми остальными" браузерами в этом случае не как они выполняют EcmaScript, но как они конструируют DOM перед лицом ошибок HTML - в вашем случае отсутствуют закрывающие кавычки для атрибутов. (Хотя есть различия в сценариях, которые здесь не актуальны)

Ваш document.write() выведет <div id="mzSeconds0 style="position:...">, что недопустимо, что приведет к другому инструменту отладки: проверке.

Если правила CSS или код Javascript ведут себя странно или непоследовательно во всех браузерах, рекомендуется проверить ваш HTML (на validator.w3.org ), поскольку недопустимый HTML будет по-разному анализироваться разными браузерами.

2 голосов
/ 21 сентября 2011

Ваша непосредственная проблема заключается в том, что вы генерируете недопустимый HTML-код, добавляете его в DOM, а затем пытаетесь найти его снова, используя document.getElementById.

Раздел, вызывающий проблемы - строка 100 из UnobfuscatedHTMLPage.html,который содержит эту строку:

document.write('<div id="'+(('mzSeconds'))+i+' style="position:absolute;top:0px;left:0px" width="15" height="15"><font face=Arial size=3 color='+sCol+'><center><b>'+S[i]+'</b></center></font></div>');

Вы пропускаете закрывающее «сразу после id="'+(('mzSeconds'))+i+', что приводит к неправильной обработке идентификатора тега div в IE (из-за двух ошибок в этомcase).

В этом разделе кода есть ряд схожих ошибок - вам нужно исправить их все (отладкой кода в инструментах Firebug или Chrome Developer), прежде чем код станет действительным и заработает.в браузерах без IE.

1 голос
/ 21 сентября 2011

Очень простой взгляд в консоли отладки любого браузера, в котором он не работает, покажет вам, где была ошибка (я использовал Chrome). Затем взгляд на DOM покажет вам, почему произошла эта ошибка. Используйте свои средства отладки, чтобы найти свои проблемы.

Я думаю, корень проблемы в том, что когда вы генерируете свой HTML, вам не хватает некоторых заключительных кавычек. Это создает нелегальный HTML, который по-разному раздражает разные браузеры.

Первая ошибка в вашем коде вызвана, потому что не существует объекта с id="mzSeconds0". Это вызвано тем, что в этой строке отсутствует двойная кавычка:

document.write('<div id="'+(('mzSeconds'))+i+' style="position:absolute;top:0px;left:0px" width="15" height="15"><font face=Arial size=3 color='+sCol+'><center><b>'+S[i]+'</b></center></font></div>');

Это должно быть с закрывающей двойной кавычкой в ​​конце id="mzSeconds0":

document.write('<div id="'+(('mzSeconds'))+i+'" style="position:absolute;top:0px;left:0px" width="15" height="15"><font face=Arial size=3 color='+sCol+'><center><b>'+S[i]+'</b></center></font></div>');

Я думаю, что такая же ошибка существует на большинстве этих типов линий, и вам нужно будет исправить их все.

0 голосов
/ 21 сентября 2011

Проверка отладчика дает: document.getElementById ("mzSeconds" + i) равен нулю и также включает номера строк и трассировку стека, которые должны упростить исправление вашей ошибки.

Причинав том, что вы выкидываете недопустимый HTML-код в браузер, который должен попытаться исправить его как-то .Очевидно, что в конечном итоге у вас есть другой DOM в IE - Firefox.

document.write('<div id="'+(('mzMinutes'))+i+' style="position:absol…

Я все еще не вижу использования обфусцирования JavaScript или написания кода в вашем стиле.Напишите HTML напрямую, вместо того, чтобы использовать JavaScript для этого.Когда вам нужно создать контент из JavaScript, используйте функции DOM вместо document.write.Это спасло бы вас от этой ошибки.

Когда вы запускаете свой код в отладчике (Firebug), вы обнаружите другую ошибку, появляющуюся.Пожалуйста, обратите внимание на строгий режим JavaScript, потому что он, вероятно, сэкономит вам много времени, указав на плохие практики.

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