我正在从头开始构建一个响应式网站,用作 SharePoint 2013 母版页,使用skel.js来控制网格和断点。一旦发布,js 文件(skel.min.js
, skel-panels.min.js
, jquery.min.js
,html5shiv.js
和config.js
我编写的用于配置 skel 和 skel-panels 的简单文件)不会在用户每次访问站点时可靠地运行,从而使 CSS 在浏览器当时匹配的任何断点处冻结. 刷新通常可以解决问题,但这不是可接受的解决方案。到目前为止,这发生在 IE、Chrome 和 FF(所有不触发的版本html5shiv
)中。
有没有人有解决 skeljs 的经验,或者知道这种行为的更高层次的原因?我对 JavaScript 的熟练程度不足以为自己解决这个问题,但即使是朝着正确的方向推进也会受到赞赏。
更新:在 IE Developer Tools (IE10) 中发现了一个错误。控制台报告SCRIPT5007: Unable to get property 'match' of undefined or null reference
并指向skel-panels.min.js
第 25 行字符 484。我查看了该行,违规语句似乎是:
b.attr("class").match(/(\s+|^)([0-9]+)u(\s+|$)/)&&b.data("cell-size",parseInt(RegExp.$2))};
这是否提供了任何有用的见解?我认为这是最常见的错误,但相信还有其他错误。我将继续尝试在所有浏览器中捕获所有这些。
更新 2:根据要求,这里是对头部 js 文件的调用。请注意,这些已转换为 SharePoint 母版页语法(当您发布页面时它会自动执行该语法),但它们与“标准”js 引用相同,并且 SharePoint 不会改变它们的工作方式。
<!--MS:<script type="text/javascript" src="/_catalogs/masterpage/SiteName/js/jquery.min.js">//<![CDATA[-->
<!--ME://]]></script>-->
<!--MS:<script type="text/javascript" src="/_catalogs/masterpage/SiteName/js/config.js">//<![CDATA[-->
<!--ME://]]></script>-->
<!--MS:<script type="text/javascript" src="/_catalogs/masterpage/SiteName/js/skel.min.js">//<![CDATA[-->
<!--ME://]]></script>-->
<!--MS:<script type="text/javascript" src="/_catalogs/masterpage/SiteName/js/skel-panels.min.js">//<![CDATA[-->
<!--ME://]]></script>-->
这是在 SharePoint 将其包装在自己的注释中之前的样子:
<script type="text/javascript" src="/_catalogs/masterpage/SiteName/js/jquery.min.js"></script>
这是它抛出的另一个异常:SCRIPT438: Object doesn't support property or method '_skel_panels_close'
在skel-panels.min.js
第 6 行字符 192 中,就在该语句的中间:c.is(":visible")?c._skel_panels_close():c._skel_panels_open()};
同样根据要求,我console.log(b);console.log(b.attr("class"));
在上面提到的第一条语句之前添加了它,以查看b
它何时失败。当它工作时,两个实例b
都是“6u”,它是 skel.min.js 中的一个类,它定义了一行中一个部分的宽度。当脚本失败时,只b
记录第一个实例并且它是“未定义的”。
更新 3:根据多人的建议,我尝试在页面末尾加载 js,但这破坏了所有脚本。在做了更多阅读之后,我决定重新安排 css 和脚本链接的顺序,以便 css 先加载。不过,我发现现代浏览器使用推测解析,因此顺序无关紧要。我通过在加载页面时没有看到明显的行为变化来确认这一点。但作为参考,脚本首先出现(大约在 SharePoint 调用的默认脚本之后的一半),然后 css 链接在head
. 我还没有找到解决这个问题的方法,所以欢迎任何建议!