导致IE'null'的Javascript重定向为null或不是对象错误

时间:2010-11-12 17:08:53

标签: javascript internet-explorer

我正在尝试A / B测试我们的产品下拉视图。下面是我正在使用的javascript代码:

  var url = window.location.href,
      defaultType = 'Gallery',
      otherType = 'List';
  if(Cookie.read('SEARCHVIEW') == otherType && Cookie.read('viewTypeChanged') != otherType){
      if(url.contains('v='+otherType)){
        url = url.replace('v='+otherType, 'v='+defaultType);
      }else if(url.contains('?')){
        url = url + '&v='+defaultType;
      }else{
        url = url + '?v='+defaultType;
      }

      window.location = url;
    }

在IE中重定向页面后,我遇到了可怕的'null' is null or not an objectObject does not support this property or method错误。

这在IE 7和&amp ;; 8

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我能够解决问题。为了将来的参考,我会发布一些代码并解释。 违规代码如下所示:

<script type="text/javascript">

 window.addEvent('domready', function(){


  $('v_toggle').addEvents({
   'mouseenter': function(e){
   $('vertical_slide_container').show();

  },
   'mouseleave': function(e){
   $('vertical_slide_container').hide();

  }
  });
 });
 </script>

</head>

<body>


<div class="mboxDefault">/div>
<script type="text/javascript">mboxCreate('header',etc...);</script>

我的公司使用Omniture进行A / B测试,我的代码在mboxCreate()函数中运行。您将在上面注意到,有一些代码添加了domready事件,该事件会将悬停事件添加到我们的导航中(顺便提到我的mboxCreate()代码下方)。发生的事情是我的代码重定向,这阻止了页面加载,这也表明DOM已准备就绪。因此,当我调用重定向时,运行了DOM就绪代码,并尝试在不存在的DOM元素上添加悬停事件。

因此'null' is null or not an object'object does not support this method or property错误。

该问题的解决方案是在重定向之前删除所有domready事件,因此我的无错误代码如下所示:

  var url = window.location.href,
      defaultType = 'Gallery',
      otherType = 'List';
  if(Cookie.read('SEARCHVIEW') == otherType && Cookie.read('viewTypeChanged') != otherType){
      if(url.contains('v='+otherType)){
        url = url.replace('v='+otherType, 'v='+defaultType);
      }else if(url.contains('?')){
        url = url + '&v='+defaultType;
      }else{
        url = url + '?v='+defaultType;
      }
      window.removeEvents('domready');
      window.location = url;
    }

答案 1 :(得分:-2)

href不是window的属性,它可以与anchor()对象一起使用,尝试只使用window.location,这应该可行。