avalon只能在head引入脚本?IE8,9资源文件加载两次!

tyjaxb
  • 3
新手上路,请多包涵

avalon2(v2.2.8)只能在head引入脚本吗?
body引入脚本的情况下,IE8,9下出现了js文件被加载两次的情况。

如下代码,两个js文件在network下查看都被加载了两次

<head>
    <meta charset="utf-8">
</head>
<body>
    <div>这是首屏静态内容</div>
    <div>这是vm模板内容</div>
    <script type="text/javascript" src="https://unpkg.com/avalon2@2.2.8/dist/avalon.js"></script>
    <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
</body>

都移到head标签中后正常,但我的首屏问题如何解决呢?

<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="https://unpkg.com/avalon2@2.2.8/dist/avalon.js"></script>
    <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
</head>
<body>
    <div>这是一些静态内容,需要首屏的高性能</div>
    <div>这是vm模板内容</div>
</body>

这样的话,underscore也会被加载两次。

<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="https://unpkg.com/avalon2@2.2.8/dist/avalon.js"></script>
</head>
<body>
    <div>这是一些静态内容,需要首屏的高性能</div>
    <div>这是vm模板内容</div>
    <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
</body>

我觉得这是一个很常见的业务场景,我并不想把所有脚本都放在head中引入,但不放head里却在IE8,9下表现异常,请问该如何解决这个问题呢?

回复
阅读 2.2k
1 个回答
tyjaxb
  • 3
新手上路,请多包涵
✓ 已被采纳

思来想去觉得是解析body内的vm模板后又把编译后html重写入body内导致的。

所以我看了下源码,默认在avalon.ready后scan了body,注释掉了这句,然后自行修改如下后解决了问题:

<body>

<div id="root">
    <div>这是首屏静态内容</div>
    <div>这是vm模板内容</div>
</div>
<script type="text/javascript" src="https://unpkg.com/avalon2@2.2.8/dist/avalon.js"></script>
<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
<script>
     avalon.ready(function () {
         avalon.scan && avalon.scan(document.getElementById('root'));
     });
</script>

</body>

最后想 @司徒正美 老师,这个默认scan body的逻辑有点不太通用,能否开放到配置里去呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏