【发布时间】:2017-01-30 06:22:30
【问题描述】:
我正在尝试处理 XenForo 和基本插件之间的冲突。我也不能直接修改代码。 jQuery 1.11.3 是在用的版本,也不能升级。
我可以用 try/catch 包装调用函数并避免冲突,但真正的解决方法是用 try/catch 包装 jQuery 的 isArrayLike。
isArrayLike 位于https://github.com/jquery/jquery/blob/master/src/core.js#L464 中第 464 行的(当前版本)jQuery 源代码中
我需要抓住的似乎正是https://forum.jquery.com/topic/jquery-isarraylike-for-consistency 中关于 isArrayLike 在传递无效类型时引发错误的争论。
那么,既然 jQuery 的 isArrayLike 没有暴露出来,有没有办法把它包装起来,或者在最坏的情况下,进去替换它?
编辑:请注意,到目前为止,所有 cmets 都在尝试调试错误本身。那不是我的问题。我在问是否有任何方法可以访问 isArrayLike,所以它可以用另一个函数包装。
【问题讨论】:
-
说明你需要在问题本身中捕捉到什么。那个论坛帖子太宽泛了。
-
在邮件和警报弹出窗口悬停时,XenForo.ExtLoader 将 something 传递给 $.each(),而 $.each() 又调用 isArraylike,然后抛出 TypeError .我可以包装 XenForo.ExtLoader 以抑制错误并显示弹出窗口,但这将问题捕捉得太高了 - 弹出窗口最终无人居住。如果我能找到一种方法来包装 isArraylike 以捕获该 TypeError,我应该能够让 each() 仍然填充弹出窗口。
-
导致 TypeError 的
something是什么? -
我不确定。但是由于它来自 Xen 发送的东西,并且错误是由 jQuery 触发的,所以我也没有能力直接修复错误的原因,因此需要在事后进行猴子补丁。
-
如果通过将
isArrayLike的第一行var length = !!obj && "length" in obj && obj.length,更改为var length = !!obj && "length" in Object(obj) && obj.length,来修补jQuery,这能解决问题吗?请注意,我添加了Object调用。
标签: javascript jquery monkeypatching