我遇到的问题是我正在编写的使用Dojo和Zend Framework的应用程序。该问题仅影响Internet Explorer 6,其他版本的IE,ff,chrome和safari工作正常,没有任何问题。
当IE6登陆登录页面时,它会将发送详细信息崩溃到微软对话框。登录脚本使用dojo为用户提供一些验证,以确保其密码格式正确等。
我在一些论坛上看到dojo中的addOnLoad()函数调用可能是原因,window.setTimeout()会有所帮助。 http://www.dojotoolkit.org/forum/dojo-core-dojo-0-9/dojo-core-support/dom-manipulation-addonload-crashes-ie6
我遇到的问题是如何操作应用程序中layout.phtml中的dojo标头。我们目前在文件中有这个代码。
<?php
$this->dojo()->setLocalPath($this->baseUrl().'/javascript/dojo/dojo.js');
$this->dojo()->addStylesheetModule('dijit.themes.tundra');
echo $this->dojo();
?>
这会在html中生成以下内容。
dojo.require("dijit.form.ValidationTextBox"); dojo.require("dijit.form.Button"); dojo.require("dojo.parser"); dojo.addOnLoad(function() { dojo.forEach(zendDijits, function(info) { var n = dojo.byId(info.id); if (null != n) { dojo.attr(n, dojo.mixin({ id: info.id }, info.params)); } }); dojo.parser.parse(); }); var zendDijits = [{"id":"username","params":{"regExp":"[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$","invalidMessage":"Please enter a valid email address","trim":"true","required":"true","dojoType":"dijit.form.ValidationTextBox"}},{"id":"password1","params":{"trim":"true","lowercase":"true","regExp":"^.*(?=.{6,})(?=.*\\d)(?=.*[a-zA-Z]).*$","invalidMessage":"Invalid Password. Password must be at least 6 alphanumeric characters","required":"true","dojoType":"dijit.form.ValidationTextBox"}},{"id":"submit","params":{"label":"Login","dojoType":"dijit.form.Button"}}];
如何更改此项以尝试添加链接中提到的修复程序,或者是否有其他方法可以在没有IE6崩溃的情况下编写此文件?我希望解决此问题,而不是删除所有客户端验证,以防客户端使用IE6。
感谢...
答案 0 :(得分:1)
你可以减少它,直到你发现IE6崩溃了吗?将输出保存为静态html,确认它仍然崩溃IE并开始删除代码。完全取出addOnLoad - 它还会崩溃吗?如果没有,请取出forEach,依此类推。开始从zendDijits数组中删除元素 - 是否有一个特别导致问题?
这是IE6的股票吗?任何插件/插件?
你的php应该生成一个脚本元素来拉动dojo.js.你已经有了很好的事情 - Zend代码已知可行,所以如果你想解决这个问题,我们需要所有信息。