这个问题有几个我想介绍的基本方面:
糟糕的设计
您必须隐藏“删除”按钮的事实告诉我,您的 Archer 应用程序设计不正确。您需要通过角色和记录权限配置来控制对记录的访问,而不是使用自定义对象代码。如果我使用开发人员工具手动激活删除按钮并删除记录怎么办?作为开发人员,您想为此负责吗?我建议您退后两步,重新设计应用程序中的访问控制。你问的问题首先应该是我问的。
RSA Archer 平台
所有与 jQuery 相关的答案均未考虑以下因素:
- 这是自定义对象的代码 - RSA Archer 平台中使用的特殊类型的对象。
- Archer 平台生成富含 JavaScript 的网页。所以我建议你不要重载与文档相关的函数,除非确实需要这样做。
- 加载表单时执行自定义对象代码,在大多数情况下不需要覆盖“document.load”事件处理程序。
这是可用于 IE8-IE11、FireFox、Chrome 和 Opera 的代码示例:
<script type="text/javascript">
document.getElementById("master_btnDelete").style.display = "none";
</script>
为什么这行得通?因为存储在 Archer 中自定义对象中的 JavaScript 代码将在作为表单本身的一部分加载后执行。
IE 特定行为
如果给定的弓箭手应用程序有一个用于填充交叉引用值列表的弹出对话框窗口,您实际上可能需要覆盖窗口加载事件。在这种情况下,包括“删除”按钮在内的工具栏按钮可能会在显示每个弹出窗口后恢复。在这种情况下,您必须使用类似的代码:
<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 Question and MSDN Help Page
现在,为什么您的 jQuery 基础代码不起作用?我不知道,可能是您编写的 Archer 版本使用的 jQuery 库版本对 IE9 的支持不够好。这让我想到了另一点。
使用 Archer 提供的 jQuery
您在提供的原始代码示例中使用了 jQuery。我建议您在为 Archer 编写自定义对象时不要使用任何库。
- 您使用的 jQuery 库是作为平台的一部分提供的。jQuery 库可以“自定义构建”以包含您使用的功能。或者在这种情况下,包括 Archer 开发人员使用的 jQuery 函数。在 Archer 的下一个版本中,此列表可能会更改。如果您使用的函数在最新版本中不再是库的一部分会怎样?
- 您无法控制使用的 jQuery 版本。因此,您不能保证对某些浏览器的支持,也不能强制 RSA 使用最新版本。这限制了代码的功能。这正是这里发生的事情。您使用了 jQuery,但它不适用于 IE9。它适用于 IE11 吗?使用最新补丁升级 Archer 后会发生什么?
- 请记住,您编写的代码必须与 Archer 已经加载的另外 10k+ 行 JavaScript 代码一起工作。因此,请让您的自定义对象尽可能简单,并尽量不要使用任何外部库。一切都是为了支持(除非你在那里呆了 1 个月并且不打算支持你的代码)。
概括
- 不要在 RSA Archer 中隐藏删除按钮,而是重新设计安全性。从长远来看,您会后悔隐藏删除按钮的决定。有一天用户实际上会删除记录,您会感到痛苦。
- 使用 KISS 原则 - 使用简单的 JavaScript 代码,避免使用库,保持自定义对象简短。尽可能避免使用自定义对象。否则每次更新平台时都必须对其进行测试。
祝你好运,用户 3728843!