Javascript IE9无法获取属性';拆下';指未定义的或空的引用

Javascript IE9无法获取属性';拆下';指未定义的或空的引用,javascript,internet-explorer-9,Javascript,Internet Explorer 9,我在一个网站上工作,在那里我有时需要将一个大横幅加载到我的标题中。标题有一些默认样式,如果特定页面有横幅,我需要删除这些样式。这些额外的样式位于一个类中,如果存在横幅,则该类将从服务器端删除。它适用于除IE9之外的所有浏览器 document.onreadystatechange = function () { // Initialize app when document is "ready" if (document.readyState == "complete") {

我在一个网站上工作,在那里我有时需要将一个大横幅加载到我的标题中。标题有一些默认样式,如果特定页面有横幅,我需要删除这些样式。这些额外的样式位于一个类中,如果存在横幅,则该类将从服务器端删除。它适用于除IE9之外的所有浏览器

document.onreadystatechange = function () {
  // Initialize app when document is "ready"
  if (document.readyState == "complete") {

    var dom = {};
    dom.$header = document.querySelector('.js-header');
    dom.$banner = document.querySelector('.js-banner-image');

    resizeBanner();
  }
}

function resizeBanner(){
  if(dom.$banner && dom.$banner !== null && dom.$banner !== undefined) {
    dom.$header.classList.remove('has-no-banner');
  }
}
浏览器尝试删除类时会停止,因为它“无法获取未定义或空引用的属性'remove'。但是,变量已定义,元素存在于DOM中

如果我转到一个没有横幅的页面,函数就不会启动(这是预期的行为),因此从逻辑上讲,这不是混乱的条件,它会找到
dom。$banner
很好,但为了测试,我尝试给元素一个ID,并在我的方法之前声明它。这并没有解决问题

脚本文件在我的文档底部用
defer async
引用


我做错了什么?

IE9不支持
.classList
属性。使用更传统的方式添加/删除类,如下所示:

IE9不支持
.classList
属性。使用更传统的方式添加/删除类,如图所示:

变量声明位于单独的函数中,该函数在
readyState==“complete”
上运行。我将更改我的问题以反映这一点,@Nix-请参阅我最新版本的答案。是的。我想就这样了,但我不会让我这么快接受答案。我会试试看,以后再接受。谢谢变量声明位于单独的函数中,该函数在
readyState==“complete”
上运行。我将更改我的问题以反映这一点,@Nix-请参阅我最新版本的答案。是的。我想就这样了,但我不会让我这么快接受答案。我会试试看,以后再接受。谢谢