防止退格按钮在Sharepoint 2010和IE中导航回来

时间:2012-11-21 17:13:50

标签: javascript internet-explorer sharepoint-2010

作为用户要求,我必须禁用退格按钮以在历史记录中导航回来。我做了以下代码

   //Bind back nutton to prevent escaping the page with backspace
$j(document).unbind('keydown').bind('keydown', function (event) {
  var doPrevent = false;

  if (event.keyCode === 8) 
  {
      if(event.target == document.body){
          if(event.preventDefault()){ event.preventDefault(); }
          event.stopEvent();
          event.returnValue = false;
      }
  }
});

除了IE7和IE8之外,这在所有浏览器中都能正常运行。我无法将输入类型绑定为异常,因为SharePoint中的内容编辑器允许修改元素div,段落等中的文本。解决方案在IE8中不起作用,因为event.target返回有鼠标悬停时的元素没有具有焦点的控件。

4 个答案:

答案 0 :(得分:1)

由我自己解决,案件结案。

编辑:2012年与SharePoint 2010和jquery 1.x合作,今天不确定。

//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function (event) {
    if (event.keyCode === 8) 
    {
     var doPrevent = true;
     //Chrome, FF, Safari
     if(event.target == document.body){
      doPrevent = true;
     }
     //IE
     else
     {
      var nodeName = event.target.nodeName.toLowerCase();
      if((nodeName == "input" && event.target.type == "text") || nodeName == "textarea")
      {
       doPrevent = false;
      }
      var SPEditTabInstance = $(document).find("li[id='Ribbon.EditingTools']");
      if(SPEditTabInstance != "undefined" && SPEditTabInstance != null && $(SPEditTabInstance).children().length > 0){
       doPrevent = false;
      }
     }

     if(doPrevent)
     {
      //Chrome, FF, Safari
      if(event.preventDefault()){ event.preventDefault(); }
      //IE
      else
      {
       event.returnValue = false;
      }
     }
    }
});

答案 1 :(得分:1)

我建议对Machinegon的修正进行调整。如果用户在类型为text的readonly输入控件中单击退格键,代码也应该阻止默认行为。

extension CGImage{
    func getPixelColor(pos: CGPoint) -> UIColor {

        let pixelData = self.dataProvider!.data
        let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

        let pixelInfo: Int = ((Int(self.width) * Int(pos.y)) + Int(pos.x)) * 4

        let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
        let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
        let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
        let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)

        return UIColor(red: r, green: g, blue: b, alpha: a)
    }
}

答案 2 :(得分:0)

尝试回到创建要求的人员,从可用性的角度来看,打破所有浏览器无处不在的重要功能并不是一个特别好的主意。这样做的成本(包括花时间向用户解释为什么他们的浏览器“不再工作”)将大大超过后退按钮有点烦人的成本。

答案 3 :(得分:0)

Machinegon的答案很好用,我只是添加它来处理另一种情况。

如果输入框是readonlydisabled,并且您在输入框上按了退格键,则转到上一页。因此,以下代码将可以处理这种情况:

//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function(event) {
    if (event.keyCode === 8) {
        var doPrevent = true;
        //Chrome, FF, Safari
        if (event.target == document.body) {
            doPrevent = true;
        }
        //IE
        else {
            var nodeName = event.target.nodeName.toLowerCase();
            if (((nodeName == "input" && event.target.type == "text") || nodeName == "textarea") 
              && !event.target.disabled && !event.target.readOnly) {
                doPrevent = false;
            }
        }

        if (doPrevent) {
            //Chrome, FF, Safari
            if (event.preventDefault()) {
                event.preventDefault();
            }
            //IE
            else {
                event.returnValue = false;
            }
        }
    }
});