gpt4 book ai didi

javascript - 函数 (..) 抛出 'eval is evil' 消息

转载 作者:搜寻专家 更新时间:2023-11-01 05:06:44 24 4
gpt4 key购买 nike

我没有使用 eval,我不确定 Crockford 对以下内容有什么问题。是否有更好的方法来解决以下问题,或者这只是我需要忽略的问题(如果有需要改进的地方,我更愿意完善/改进我的解决方案)。

我正在使用一些像素跟踪工具,在这种情况下,客户端已将 JS 函数绑定(bind)到重定向到站点之外的 HTML 图像标记的 onclick 属性。我需要可靠地跟踪点击,而不会遇到图像上多个事件监听器的竞争条件。策略是在运行时覆盖事件,在我自己的函数中复制并运行它。请注意,这将应用于我无法控制且无法更改的网站。所以解决方案看起来像:

...
func = Function(img.attr('onclick'));
...
img.attr('onclick', '');
... //some custom tracking code
func.call(this);

并且 JSLint 检查器抛出 eval is evil 错误。

有没有更好的方法来避免围绕 href 操作的多个事件的竞争条件?

最佳答案

您正在隐式使用 eval,因为您正在请求回调函数因为它在 HTML 中被指定为字符串的属性,然后构造一个 Function 用它。

只需使用 img.onclick 属性,您将直接从属性中获取浏览器构建的功能,然后您可以 .call:

var func = img.onclick; // access already compiled function
img.onclick = null; // property change updates the attribute too

... // some custom tracking code

func.call(img, ev); // call the original function

或者更好:

(function(el) {
var old = el.onclick;
el.onclick = function() {
// do my stuff
..
// invoke the old handler with the same parameters
old.apply(this, arguments);
}
})(img);

后一种方法的优点有两个:

  1. 它不创建新的全局变量——一切都隐藏在匿名闭包中
  2. 它确保使用与提供给替换函数的参数完全相同的参数调用原始处理程序

关于javascript - 函数 (..) 抛出 'eval is evil' 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com