如何防止“无法获取属性值”'dir':对象为空或未定义&;在IE9中加载页面时出现错误
How to prevent "Unable to get value of the property 'dir': object is null or undefined" error when loading pages in IE9
我有一个Dojo 1.7.4应用程序,在IE9加载页面时,"无法获得属性'dir'的值:对象为空或未定义"错误。
我使用的是AMD构建,当它必须单独加载所有文件时,错误不会发生。
所有的代码,我有控制是在dojo/ready和dom/domReady包装!召唤到偏执的地步。
当错误发生时,我用IE9调试器捕获它,调用堆栈显示在调用isBodyLtr时发生错误,但调用堆栈的顶部是nls/synapse_en-gb.js。nls/synapse_en-gb.js文件似乎是编译nls文件与所有的en-gb翻译的应用程序。
这似乎是通过"en-gb"作为我在dojoConfig中唯一的区域设置条目而加载的,并且我似乎无法控制以确保它也被包装在dojo/ready或dojo/domReady!
下面是我的HTML中引导Dojo包的示例代码。
任何指针防止翻译文件运行,直到dom和剩余的Dojo文件已完全加载?
<script type="text/javascript">
//<![CDATA[
var dojoConfig = {
async: true,
parseOnLoad: true,
isDebug: true,
locale: "en-gb",
baseUrl: "/synapse/js/dojo/dojo/",
paths: {"synapse": "../../synapse"}
};
//]]>
</script>
<script type="text/javascript" src="/synapse/js/dojo/dojo/dojo.js"></script>
<script type="text/javascript">
//<![CDATA[
require(['dojo/ready', 'synapse/synapse', 'dojo/domReady!'], function(ready) {
ready(function () {
require(['dojo/ready', 'synapse/overlay','dojo/domReady!'], function (ready, package) {
ready(function() {
package.init();
});
});
});
});
//]]>
更新日期:2013年4月17日为了尝试找出堆栈跟踪中有哪些函数调用,我从dojo.js.uncompress.js引导。
这表明nls/synapse_en-gb.js是入口点,调用var def = function()
(在全局命名空间中暴露为define
,然后是checkComplete
,然后是execModule
等等)。
由于这似乎在DOM加载之前运行,我需要找到一种方法来确保nls/synapse_en-gb.js在DOM加载之前不运行。
查看我生成的synapse/synapse.js,在基础处有一个*now函数,它似乎预加载了i18n files文件。例如
"*now":function(r){
r(["dojo/i18n!*preload*synapse/nls/synapse*['"ar'",'"ca'",'"cs'",'"da'",'"de'",'"el'",'"en-gb'",'"en-us'",'"es-es'",'"fi-fi'",'"fr-fr'",'"he-il'",'"hu'",'"it-it'",'"ja-jp'",'"ko-kr'",'"nl-nl'",'"nb'",'"pl'",'"pt-br'",'"pt-pt'",'"ru'",'"sk'",'"sl'",'"sv'",'"th'",'"tr'",'"zh-tw'",'"zh-cn'",'"ROOT'"]"]);
}
我可能最终不得不重新定位所有的dojo加载,直到有一个更好的机会DOM已经加载,之前dojo做它的事情。
您可以通过在实际函数前添加一个数字来控制ready函数的执行:
ready(999999,function() {
package.init();
});
数字小意味着早执行,数字大意味着晚执行!
你在ready函数中嵌套了一个ready函数。我认为他们不应该那样使用……
我最终不得不将脚本的内联部分移动到</body>
标记之后。
- 对象为null或IE9中存在未定义错误
- IE9中的有效输出,但IE7/IE8中的未定义输出
- IE9 JS 无法获取属性“display”的值:对象为空或未定义
- IE9中Magento上的灯箱JS错误 - 无法获取属性“0”的值:对象为空或未定义
- IE9无法获取属性'删除'的未定义引用或null引用
- '日期'在FacePile加载的javascript中的IE9中未定义
- 无法获取属性'替换'的未定义-仅在IE9中
- 从HTML头加载层时,Dojo构建在IE9上失败:property'dir'未定义
- IE9 Javascript错误::未定义/为Null
- Javascript不能在Chrome或IE9中工作-错误”;复选框未定义“;显示在FF JS控制台中
- jQuery IE9:无法获取属性'的值;val':对象为null或未定义
- angularjs IE9的作用域变量变为未定义
- IE9错误:SCRIPT5007:无法获取属性'ajax': object为空或未定义的值
- 元素属性在ie9中未定义
- Google Chart IE9问题(未定义)
- (IE9)无法获取property 'dispatchEvent'未定义或空引用的
- jQuery IE9-10:无法获得未定义或空引用的属性替换
- 如何防止“无法获取属性值”'dir':对象为空或未定义&;在IE9中加载页面时出现错误
- ie9上的Ajax调用(成功数据-未定义)
- IE9 - SCRIPT5009: jQuery"是未定义的