我使用基于Web的开发环境来存储数据。环境允许我创建由表单事件触发的规则。这些事件在浏览器中以js运行,但几乎不支持调试,这使得解决问题成为一场噩梦。
浏览器中的代码有一个中央事件处理程序,它具有日志记录功能,但由此产生的信息量非常大,因此很难找到所需内容。想想信息级日志记录疯了。另外,您必须打开一个单独的窗口来访问日志。
我需要能够将某些事件记录到控制台,或者在指定的规则下触发断点。有没有办法修改下面的环境代码,允许它调用我的调试器而不是(或另外)调用SFLog?
function handleEvent(n,t,q,r,u,f,e,o,s,h,c,l){
if(eventsCancelled!==!0){
SFLog({type:3,source:"handleEvent",category:"Events",
message:"{2} event fired from {1} - {0}",parameters:[n,t,q]});
var b="Events/Event[@SourceID='"+n+"'][@SourceType='"+t+"'][Name/text()="+q.xpathValueEncode()+"]";
//Rest of the event handler...
function SFLog(n){
if(checkExists(_debug)){var s=translateDebugLevel(n.type);
if(s>=_debug){
varu=n.type,e=n.source,r=n.category,q=n.message,h=n.parameters,o=checkExists(n.exception)? WriteExceptionXml(n.exception):null,t=n.data,l=checkExists(n.humanateData)?
n.humanateData:!0,f=(new Date).format("yyyy-MM-ddTHH:mm:ss:fff");
checkExists(t)&&(dataString=t.xml,checkExists(dataString)||(dataString=t),l===!0&&(dataString=Humanate(dataString)));
//more code for SFLog...
清理代码
function handleEvent(n, t, q, r, u, f, e, o, s, h, c, l) {
if (eventsCancelled !== !0) {
SFLog({
type: 3,
source: "handleEvent",
category: "Events",
message: "{2} event fired from {1} - {0}",
parameters: [n, t, q]
});
var b = "Events/Event[@SourceID='" + n + "'][@SourceType='" + t + "'][Name/text()=" + q.xpathValueEncode() + "]";
//Rest of the event handler...
}
}
function SFLog(n) {
if (checkExists(_debug)) {
var s = translateDebugLevel(n.type);
if (s >= _debug)
{
varu = n.type;
e = n.source;
r = n.category;
q = n.message;
h = n.parameters;
o = checkExists(n.exception) ?
WriteExceptionXml(n.exception) :
null;
t = n.data;
l = checkExists(n.humanateData) ?
n.humanateData :
!0;
f = (new Date).format("yyyy-MM-ddTHH:mm:ss:fff");
checkExists(t) &&
(dataString = t.xml, checkExists(dataString) ||
(dataString = t), l === !0 && (dataString = Humanate(dataString)));
//more code for SFLog.

答案 0 :(得分:1)
我同意@Eddie但是一个解决方案可能是包装记录器功能并覆盖它,并且只记录您关心的事件。 e.g:
function SFLog(n){
//old code
}
//run on the console, the first line, and then the second.
var oldLoggger = SFLog;
function SFLog(n) {
if(/*some criteria*/) {
oldLogger(n);
}
}
通过这种方式,您可以运行具有不同条件的默认记录器,但如果您可以修改记录器代码本身以接受某些条件(例如,记录事件类型,或者记录目标元素的ID,类等等),则最好。
PD:如果您需要修改eventHandler本身,您应该: