从HTML头加载层时,Dojo构建在IE9上失败:property'dir'未定义
Dojo build fails on IE9 when loading layer from HTML header: property 'dir' is undefined
我制作了一个dojo构建,但我希望在启用/禁用构建时具有灵活性,所以我尝试在HTML头中加载<script>
标记:
<script src="js/config.js"></script>
<script src="/dojo/1.9/dojo/dojo.js" data-dojo-config="async: true"></script>
<script src="/dojo/1.9/dojo/dojo-all.js"></script>
并且我未修改JS文件。然而,它似乎起了作用,但存在一个问题,但仅在IE9上,而且仅在部署在WebSphere上的应用程序版本上(我在Apache2上进行了测试)。问题是,在特定的代码片段中,属性"dir"未定义:
geom.isBodyLtr = function isBodyLtr(doc) {
doc = doc || win.doc;
return (win.body(doc).dir || doc.documentElement.dir
|| "ltr").toLowerCase() == "ltr";
};
在搜索了一些类似的问题(例如:如何防止在IE9中加载页面时出现"无法获取属性值';dir';:对象为null或未定义"错误)后,我发现这可能是一些加载顺序问题。我已经从HTML头中删除了该层,并按照以下顺序将其加载到JS中:
require(["dojo/domReady!"], function(){
// load the layers, but only after document is ready
require(['dojo/dojo-all'], function(){
require(["dojo", "dojo/on", "dojo/dom-attr", "dojo/dom-class", (... and hundred more)
然而,我知道人们正在HTML头中加载构建,例如这里的主题:Dojo构建。。。?现在怎么办?
所以我的问题是,我是做错了什么,还是HTML头的技巧不能保证在所有浏览器上都能工作?
这是我的构建脚本配置:
'dojo/dojo': {
include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],
boot: true,
customBase: true
},
'dojo/dojo-all': {
include: ["dojo/on", "dojo/dom-attr", "dojo/dom-class", "dojo/query", "dojo/_base/lang", "dojo/request/xhr",
"dijit/registry","dijit/form/TextBox", "dijit/form/Textarea", "dijit/form/ComboBox", "dijit/form/FilteringSelect", "dijit/form/CheckBox", "dijit/form/Button",
"gridx/core/model/cache/Sync", "gridx/Grid", "gridx/modules/SingleSort", "gridx/modules/ColumnResizer",
(...and hundred more)],
boot: false, // exclude bootstrap modules
customBase: false
},
这是dojo:的build.bat
java -Xms256m -Xmx256m -cp "%~dp0../shrinksafe/js.jar";"%
~dp0../closureCompiler/compiler.jar";"%~dp0../shrinksafe/shrinksafe.jar"
org.mozilla.javascript.tools.shell.Main "%~dp0../../dojo/dojo.js"
baseUrl="%~dp0../../dojo" load=build %*
我们最近在加载层文件的顺序上遇到了同样的问题。为了让它与IE9一起工作,您确实需要控制层文件加载的顺序,所以是的,最简单、最可靠的方法是require
您的层文件,而不是使用<script>
来加载它们。
查看此页面底部的示例,其中包含嵌套在另一个需求中的需求:
http://www.sitepen.com/blog/2012/06/11/dgrid-and-dojo-nano-build/
我们刚刚对产品进行了完全相同的更改,以避免IE9和IE10出现偶发故障(有7个层文件,其中一个需要覆盖其他文件中定义的模块的旧版本)。<script
>让看起来工作了一段时间,但事实证明我们不能依赖它。
- $(this).prop('property') vs. this.property
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 当一些承诺失败时,如何继续使用$q.all()
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 在Jquery中单击传播失败
- 网页上失败的javascript会导致所有其他脚本失败
- 带有对象解析的响应javascript ajax失败
- 一台特定计算机的Ajax请求数据未定义/失败
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- jQuery.getJSON失败,语法错误
- ng disabled在放入多个表达式时失败
- Jasmine单元测试在监视服务方法时失败
- jQuery分页下一页和上一页按钮在点击零或超过最后一页后失败
- 在iframe的情况下,jQuery html()将失败
- 在我的情况下,使用带有变量失败的 jquery 选择器
- CSS中的转换似乎失败了,原因是什么
- 从HTML头加载层时,Dojo构建在IE9上失败:property'dir'未定义