外部javascript文件注入不工作在chrome上

external javascript file injection not working on chrome

本文关键字:chrome 工作 javascript 文件 注入 外部      更新时间:2023-09-26

我已经给了这个函数注入外部javascript文件到渲染的html:

function inject(src, cb, target){
  target = target || document.body;
  var s = document.createElement('SCRIPT');
  s.charset = 'UTF-8';
  if(typeof cb === 'function'){
    s.onload = function(){
      cb(s);
    };
    s.onreadystatechange = function () {
      (/loaded|complete/).test(s.readyState) && cb(s);
    };
  }
  s.src = src;
  target.appendChild(s);
  return s;
}

,这是调用函数:

$(function (){
  inject(swifttagurlftlpre43sc,function(script){
    var a = swifttagdiv.firstChild.attributes[2].value.substr(11);
    var is = swifttagdiv.firstChild.firstChild.src;
    var onLine = (is.substring(is.lastIndexOf('/') + 1) == 'staffonline.png');
    if (onLine) {
      $('#spanactive2').html('<span style="color: #567591;"><?php echo($content->getString('active')); ?><'/span>');
      $('#chaton2').html('<img src="/site/img/chaton.gif" alt="" />');
      $('#chat_box_timer').click(function() { eval(a); });
    } else {
      $('#live_chat_block_timer').remove();
      $('#chaton2').html('<img src="/site/img/chatoff.png" alt="" />');
    }
  });
});

它在Firefox上运行良好。它不工作在铬虽然。开发工具给了我这个错误:未捕获的TypeError:不能调用null的appendChild方法

我如何修复,或者至少开始调试这个?

我很难在onload完成之前正确访问body(我曾认为这是IE问题,但它可能更普遍)。会是这样吗?

我的最佳猜测是,不同浏览器之间生成的DOM不同,而swifttagdiv。在chrome中,firstChild没有属性[2],但在其他浏览器中有。它所拥有的是attributes['href']属性。所以解决方案是改变

var a = swifttagdiv.firstChild.attributes[2].value.substr(11);

var a = swifttagdiv.firstChild.attributes['href'].value.substr(11);