我正在使用 COGNOS,这是一个非常令人沮丧的 BI 应用程序,它严重依赖于 Javascript。基本上,当一个<select>盒子被改变时,屏幕上的数据会被刷新,大概是通过 AJAX 函数或类似的东西。我想使用 jQuery 强制进行此更改,但我不确定如何拦截它正在进行的调用,以便我可以复制它。还有大量的 JS 代码,所以很难手动找到。
有没有办法使用 Firebug 来显示被调用的不同函数?我的方法正确吗?
如果您打开 Firebug脚本面板,左上方有一个按钮,看起来像电视遥控器上的暂停按钮:||. 这告诉 Firebug 暂停下一段运行的 JavaScript。所以我会打开页面,确保脚本面板已启用,单击该按钮,然后更改select框。这应该会在 Firebug 中触发一个断点,之后您可以单步执行代码以确定何时调用了什么。
或者,如果您不介意使用其他工具,Google Chrome有一个内置的调试器和检查器,可以显示附加到元素的事件处理程序。因此,在 Chrome 中,如果您打开页面,请右键单击该select框并选择Inspect Element,然后在底部的右侧应该有一个附加到它的事件处理程序列表。这可能更容易使用。
最后,在任一工具中,如果您可以识别出实际导致数据重新加载的代码(通过查找 URL,例如,或XmlHTTPRequest实例,或 jQuery 的.ajax, .post,.get或.getJSON函数,如果它使用 jquery),您可以在其上放置一个断点,然后触发选择,然后查看调用堆栈(在两个工具的右侧)。
祝你好运!
遗憾的是,此时,您可能最好在 Cognos 中使用老式的警告框调试方法。IBM 曾表示,较新版本的 Cognos 将在 Firefox 中运行,但 IBM 之前的代码非常以 IE 为中心,在新版本的 IE 中甚至不是特别好。您还可以在较新版本的 IE 中使用 F12 调试器功能,这有时很有用。我不假装这些都和 Firebug 一样好。
此外,关于您尝试调试的实际问题,Cognos 中的选择(如果您在编辑报告时单击它)有一个名为“Auto-submit”的参数。如果将其更改为“否”,则无需禁用 jQuery 中的行为。
如果您使用的是 Firefox + Firebug,您可以激活“net”选项卡并检查所有正在进行的 Ajax 调用。(在 XHR 按钮下查看)
在 Firefox 中选择 Element 并查看它的 onclick 事件是什么,或者它是否有 ID,然后在 JS 文件中搜索该 ID。