我们有一个有趣的示例,说明我们的EcmaScript / JavaScript Obfuscator如何工作。 我们提供链接,显示未经模糊处理和混淆的Ecmascript源 “动态时钟”。当您按下开始按钮时,您将看到时钟图形部分跟随您的鼠标移动,当您停止移动鼠标时,它会形成一个滴答作响的圆形时钟。
看这里...... http://www.semdesigns.com/Products/Obfuscators/ECMAScriptObfuscationExample.html
未混淆和混淆的代码都可以在Internet Explorer中正常工作,但在FireFox中不能正常工作。那么,EcmaScript for FireFox和Internet Explorer之间的区别是什么导致此代码与Internet Explorer一起使用而不与FireFox一起使用?我已经尝试了几个版本的FireFox,包括最新版本,但都失败了。
答案 0 :(得分:3)
首先要检查的是“错误控制台”或Firebug控制台 - 发现它取决于您的Firefox版本以及是否安装了Firebug。
我在试用你的页面时立即在控制台中找到了这个:
Error: document.getElementById("mzSeconds" + i) is null
Source File: http://www.semdesigns.com/Products/Obfuscators/UnobfuscatedJavaScriptMouseClock.js.txt
Line: 19
<强>更新强>
找到错误,并且Dexter和jfriend00已经指出了为什么你首先得到错误,我们可以看到IE和“所有其他”浏览器之间的区别在于 not not 他们如何执行EcmaScript,但他们如何在面对HTML错误时构建DOM - 在您的案例中缺少关于属性的结束引号。 (虽然有脚本差异,但这里不相关)
您的document.write()
会输出无效的<div id="mzSeconds0 style="position:...">
,导致另一个调试工具:验证。
如果CSS规则或Javascript代码在浏览器中表现异常或不一致,最好验证您的HTML(validator.w3.org),因为不同的浏览器会以不同的方式解析无效的HTML。
答案 1 :(得分:2)
您当前的问题是,您生成无效的HTML代码,将其附加到DOM,然后尝试使用document.getElementById
再次找到它。
违规部分是UnobfuscatedHTMLPage.html
的第100行,其中包含以下行:
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+'
之后的结束,这导致在IE中错误地处理div标签的id(在这种情况下,两个错误是正确的)。
在该部分代码中存在许多类似的错误 - 在代码有效并且在非IE浏览器中工作之前,您需要解决所有这些错误(通过在Firebug或Chrome Developer工具中调试代码)。
答案 2 :(得分:1)
在任何浏览器的调试控制台中看起来非常简单,它会显示错误的位置(我使用的是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>');
我认为大多数这类线路都存在同样的错误,你需要修复它们。
答案 3 :(得分:0)
检查调试器会产生: document.getElementById(“mzSeconds”+ i)为空,还包括行号和堆栈跟踪,这样可以轻松修复错误。
原因是您向浏览器抛出了无效的HTML,需要尝试纠正以某种方式。显然,你最终在IE浏览器中拥有一个不同的DOM。
document.write('<div id="'+(('mzMinutes'))+i+' style="position:absol…
我仍然没有看到使用混淆JavaScript或在你的风格中编写代码。直接编写HTML而不是滥用JavaScript来执行此操作。当您需要从JavaScript创建内容时,请使用DOM函数而不是document.write
。这样可以避免这个错误。
当您将代码运行到调试器(Firebug)时,您会发现其他错误弹出。请同时查看JavaScript严格模式,因为通过指出不良做法可能会为您节省大量时间。