jQuery代码在Chrome中工作但在IE中没有

时间:2014-06-11 07:00:47

标签: javascript jquery google-chrome archer rsa-archer-grc

我正在RSA Archer Platform中实现此代码。

它在Chrome中完美运行,但在IE9中却没有。

function hideDeleteButton(){
  var elId = "master_DefaultContent_rts_s2487_f6881srvgrid_ctl00";
  var el = document.getElementById(elId);
  var className = "GridRemoveImage";
  if (el != null) { 
    var lst = el.getElementsByClassName(className);
    for (var i = 0; i < lst.length; ++i) { 
      lst[i].style.display = 'none';
    }
  }
}

$(window).bind("load", function(){
   hideDeleteButton();
});

document.load = hideDeleteButton();

6 个答案:

答案 0 :(得分:2)

由于您使用jquery标记了问题,因此我编写了与您提供的javascript代码等效的jquery代码。

$(window).load(function() {
    $("#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00").find(".GridRemoveImage").hide();
});

您不必遍历每个元素来更改可见性。此代码也具有浏览器兼容性。

答案 1 :(得分:1)

这个新功能应该可以胜任:

function hidedeletebutton() { 
    $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').each(function() {
        $(this).hide();
    });
}

它做的相同,只是更短,并使用jQuery

答案 2 :(得分:1)

这个问题有几个我想要涵盖的基本方面:

糟糕的设计

你必须隐藏&#34;删除&#34;按钮告诉我你的Archer应用程序设计不正确。您需要通过角色和记录权限配置来控制对记录的访问,而不是使用自定义对象代码。 如果我使用开发人员工具手动激活删除按钮并删除记录怎么办?你想作为开发人员对此负责吗? 我建议您退后两步,重新设计应用程序中的访问控制。你问的问题应该是我在第一时间问的。

RSA Archer Platform

所有与jQuery相关的答案都没有考虑以下因素:

  • 这是自定义对象的代码 - RSA Archer平台中使用的特殊对象类型。
  • Archer平台生成JavaScript丰富的网页。因此,除非确实需要这样做,否则我建议您不要重载与文档相关的功能。
  • 在加载表单时执行自定义对象代码,在大多数情况下,不需要覆盖&#34; document.load&#34;事件处理程序。

这是您可以用于IE8-IE11,FireFox,Chrome和Opera的代码示例:

<script type="text/javascript">
    document.getElementById("master_btnDelete").style.display = "none";
</script>

为什么会这样?因为存储在Archer中的自定义对象中的JavaScript代码将在作为表单本身的一部分加载后执行。

IE特定行为

如果给定的archer应用程序有一个用于填充交叉引用值列表的弹出对话框窗口,则实际上可能需要覆盖窗口加载事件。在这种情况下,工具栏按钮包括&#34;删除&#34;在显示每个弹出窗口后,可能会恢复按钮。在这种情况下,您必须使用类似的代码:

<script type="text/javascript">
    // function that will hide the Delete button
    function doLoad() {
        alert( "The load event is executing" );
        document.getElementById("master_btnDelete").style.display = "none";
    }

    // code that will add load event for IE and none-IE browsers
    if (window.addEventListener){window.addEventListener("load",doLoad,false);}
    else 
    if (window.attachEvent) { window.attachEvent("onload",doLoad);}
    else 
    if (window.onLoad) { window.onload = doLoad;}
</script>

不幸的是,微软与IE设计不太一致,这就是为什么你必须检查哪些事件处理方法有效并应该使用。 如果您对此代码有更多疑问,可以使用以下两个链接作为参考:StackoverFlow QuestionMSDN Help Page

现在,为什么你的jQuery基础代码没有用?我不知道,可能是您编写的Archer版本使用的jQuery库版本不能很好地支持IE9。这让我想到了另一点。

Archer提供的jQuery的用法

您在提供的原始代码示例中使用了jQuery。我建议您在为Archer编写自定义对象时不要使用任何库。

  1. 您使用的jQuery库是作为平台的一部分提供的。 jQuery库可以&#34;自定义构建&#34;包括您使用的功能。或者在这种情况下,包括Archer开发人员使用的jQuery函数。在Archer的下一个版本中,此列表可能会更改。如果您使用的功能不再是最新版本库的一部分,会发生什么?
  2. 您无法控制所使用的jQuery版本。因此,您无法保证对某些浏览器的支持,并且您无法强制RSA使用最新版本。这限制了代码的功能。而这正是这里发生的事情。你使用了jQuery,但它并没有使用IE9。它会与IE11一起使用吗?使用最新补丁升级Archer后会发生什么?
  3. 请记住,您编写的代码必须使用Archer已经加载了页面的另外10k + JavaScript代码行。因此,请尽可能简化自定义对象,尽量不要使用任何外部库。这完全取决于支持(除非您在那里工作了1个月并且不打算支持您的代码)。
  4. 摘要

    1. 不要隐藏RSA Archer中的删除按钮,但重新设计安全性。你会后悔从长远来看隐藏删除按钮的决定。有一天用户实际上会删除记录,你会感到痛苦。
    2. 使用KISS原则 - 使用简单的JavaScript代码,避免库,保持Custom对象简短。尽可能避免自定义对象。或者,每次更新平台时都必须对它们进行测试。
    3. 祝你好运,user3728843!

答案 3 :(得分:1)

您还可以使用简单 CSS隐藏元素,这更有可能跨浏览器工作

在这种情况下:

#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage {
  display: none;
}

答案 4 :(得分:0)

@StanUteski提出了一些很好的观点并列出了非常好的最佳实践。

另外请记住,如果用户使用像Safari这样的奇怪浏览器来获取基本功能,那么你仍会得到奇怪的结果。

此外,浏览器可能会意外关闭JavaScript。

现在,你可能会说这没有用,&#34; ... b / c我的用户知道Archer只会使用&#39; 123&#39;特定版本的&#39; ABC&#39;浏览器&#34; - 但是,重要的是,即使他们是世界上最好的用户,并且完全了解,您也无法控制他们使用的浏览器,或者他们是否使用平板电脑或手机,或者如果页面加载奇怪并且没有正确加载脚本/库 - 即使页面没有渲染,在这种情况下你可能仍然会暴露按钮,并创建了一个可能性用户点击并删除记录。

在所有情况下,您都希望坚持使用适用于Web应用程序的MVC(模型 - 视图 - 控制器)或MVVM(模型 - 视图 - 视图 - 模型)编程范例,其中CONTROLLER位于服务器端并且控制应用程序&#34;功能流程和特性&#34; - 例如 - 包含策略列表的页面具有以下按钮,这些按钮指向相应的页面:

  • 添加
  • 修改
  • 删除

然后使用用户角色和权限(这实际上是一个不同的控制器功能 - 基本上是访问和权限管理控制器子系统)进一步限制这些按钮及其引导位置。

这导致:

  • 更容易理解来自高级别的应用程序流程
  • 允许从业务和流程的角度考虑,设计,完成应用程序首先
  • 在触及开发系统之前可以而且应该完成的事情

    • 表示用户群体的用户角色,即您转换为角色
    • 用于所有角色/角色的用例,允许您确定每个角色:
      • 可以采取行动的数据子集
      • 可以采取的实际功能/行动
      • 流程中每个点的后续步骤和决策,取决于#1和#2施加的限制。
    • 用于确定的线框:

      • 启用为流程中的每个步骤和决策门确定的功能,操作和定向流所需的UI元素。
      • 这些UI元素启用的最佳位置:
        1. 快速清晰了解信息
        2. 执行操作的最有效/最简单的方式(只有少数选项可用时,点击次数最少,单选按钮而不是下拉菜单,例如是/否,真/假)
        3. 美学上令人愉悦的观点
        4. 灵活且反应灵敏的显示器
        5. 响应性和信息性的用户提示和提示,例如:
          • 错误
          • 必填字段
          • 无效按钮
        6. 甚至可能是用户可自定义的主题
      • 查看辅助功能:

        1. 排列
        2. 能见度
        3. 主要工作&#34;屏幕&#34;用户界面的区域,例如:

          • 面板
          • 页面

          使用

          等机制将它们带入视野
          • 滑块
          • 突片

      良好的视图倾向是高效的,并且自我记录 b / c它的设计直观用户:

      1. 用户现在应该看到
      2. 用户可以看到下一个
      3. 如何看待相关信息并给予适当的优先权和房地产
      4. 何时以及如何为accessibilty交换可见性
      5. 做下一步,制作标签等等。

最后你可以真正实现:    然后驱动......

  1. 数据模型设计然后导致......
  2. 控制器编码:在Archer的情况下:

    • Application Builder以及如何设置关系,权限和操作
    • 任何自定义CALCULATED字段(服务器端控制器代码/构造) - 将其视为实际编写ASP页面的更受限制的版本。

      • 在其他Web应用程序中,您可能正在使用PHP,JSP,Ruby / Rails等进行此操作。
      • 但是,由于Archer真的更接近5GL /领域特定 - 应用程序开发工具/环境和运行时(它不是真正的框架,因为他们声称),您仅限于:
        1. 数据表示(GUI)元素
        2. 逻辑块(计算字段)
        3. 和我们在Application Builder中找到的数据结构(表,级别等)(当然除了作为新元素的自定义对象)
        4. 查看设计和编码:虽然在Archer的情况下,预计您将使用内置的,封装的GUI / 视图对象(比如网格,选项下拉菜单,菜单等),而不是(在极少数情况下你可能会在JavaScript中结束自定义编码 - 客户端/视图元素)。
  3. 通过始终将事物分开,你会:

    1. 允许良好的劳动/职责分离
    2. 允许您更快/并行地完成更多工作
    3. 可以降低人工成本,因为不同的技能可以用于:
      • 流程
      • 数据建模
      • controller
      • 查看
    4. 制作您的申请:
      • 更健壮
      • 更容易理解
      • 更容易排除故障/调试
      • 更易于维护/升级
      • 可以更快地构建
      • 的其他功能
      • 更便携
      • 更多模块化和可重复使用
    5. <小时/>

      设计和开发最佳实践

      1. 在CISO办公室有业务人员/某人负责收集和设计业务流程:
        • 捕获纸张和/或遗留系统上不存在的内容:
        • 他们希望如何改变(最终状态)
      2. 让系统分析师将业务流程转换为功能性应用程序流程,这在Archer的整体范围内是有意义的:
        • 框架
        • 模块
        • 可用的数据输入和输出
        • 功能
      3. 主要的Archer Developer实现了该应用程序的功能设计(按此顺序):
        1. 数据模型
        2. 然后是控制器,使用(按以下顺序 - 最严格的[和最接近数据]限制最少[远离数据])
          1. 角色和权限
          2. 查找过滤器
          3. 表格行动
          4. 计算字段
          5. 自定义代码(作为最后的手段)
        3. 最后,视图(在Archer中实际上是使用相同的工具 - 应用程序生成器完成的)。
          1. 您可以先决定并放置 无论 字段,查找过滤器,计算的逻辑等,以构建您的控制器/功能 - 输入/输出。
          2. 然后在视图上的工作之后,就:
            • 元素应放在页面/表单上
            • 他们应该如何看待:
              • 格式化
              • 对准
              • 工具提示
            • 自定义GUI / UX铃声&amp;哨子

答案 5 :(得分:0)

$(document).ready(function(){  
  $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').hide();
});

OR

$(document).ready(function(){  
  $('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').css("display", "none");
});