使用Javascript加载脚本-在chrome上不起作用?

杰森

我正在尝试使用Javascript加载以下脚本:

function put() {
    var group = document.getElementById("obj_0123456790");
    var children = group.childNodes;

    for( var i = 0; i < children.length; i++ ) {    
        if( (children[i].name == 'movie') || (children[i].name == '') ) {
            children[i].src = "http://website.com/song.swf";
        }    
    }
}

if (window.attachEvent) {
    window.attachEvent('onload', put);
} else {
    if (window.onload) {
        var curronload = window.onload;
        var newonload = function() {
            curronload();
            put();
        };
        window.onload = newonload;
    } else {
        window.onload = put;
    }
}

我用以下代码加载它:

<script>
var i=document.createElement('script');
i.src="http://website.com/putter.js";
document.head.appendChild(i);
</script>

它在Firefox上工作正常,但在chrome上不工作。如何使它在chrome上运行?

奥古斯都·弗朗西斯(Augustus Francis)

1.此功能将跨浏览器工作以异步加载脚本

function loadScript(src, callback)
{
  var s,
      r,
      t;
  r = false;
  s = document.createElement('script');
  s.type = 'text/javascript';
  s.src = src;
  s.onload = s.onreadystatechange = function() {
    //console.log( this.readyState ); //uncomment this line to see which ready states are called.
    if ( !r && (!this.readyState || this.readyState == 'complete') )
    {
      r = true;
      callback();
    }
  };
  t = document.getElementsByTagName('script')[0];
  t.parent.insertBefore(s, t);
}

2.如果页面上已经有了jQuery,只需使用$ .getScript(url,successCallback)

最简单的解决方案是将所有脚本内联在页面底部,这样它们就不会在执行时阻止HTML内容的加载。它还避免了必须异步加载每个所需脚本的问题。

如果您有不常用的特别花哨的交互功能,需要较大的某种脚本,那么避免在需要之前加载该特定脚本(延迟加载)可能会很有用。

3.来自Google的示例

<script type="text/javascript">
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js?onload=onLoadCallback';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
</script>

4.您可能会发现此Wiki文章很有趣:http : //ajaxpatterns.org/On-Demand_Javascript

5.如果有帮助,请看一下Modernizr它是一个轻巧的小型库,您可以通过功能异步加载Java脚本,该功能使您可以检查文件是否已加载,并在指定的其他脚本中执行脚本。

这是加载jquery的示例:

Modernizr.load([
  {
    load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js',
    complete: function () {
      if ( !window.jQuery ) {
            Modernizr.load('js/libs/jquery-1.6.1.min.js');
      }
    }
  },
  {
    // This will wait for the fallback to load and
    // execute if it needs to.
    load: 'needs-jQuery.js'
  }
]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章