我遇到了同样的问题:即使你是一个好公民,也有很多插件会做出太多假设并导致页面上出现 JavaScript 错误;这些错误与您的插件无关。
尝试处理其他插件中的错误是没有意义的——IMO 最好是独立的,但对它们的错误有弹性。
就我而言,错误正在停止 jquery DOM 就绪事件,并且我的 JavaScript 初始化代码没有被执行。不过,错误的确切形式并不重要——解决方案就是触发多个事件。
对我来说,解决方案是除了依赖 jQuery DOM 就绪事件之外还有后备:
- 我将任何我想在 DOM 就绪事件上触发的代码包装到它们自己的函数中——例如 my_hardened_init_action();
- 我添加了一个函数 my_hardened_init(),它只运行一次。它在第一次调用时调用 my_hardened_init_action() ,并且在后续调用中不执行任何操作。
- 我在 WordPress 页脚中添加了各种方法来调用 my_hardened_init()。就我而言,我只需要两个。首先,尝试通常的 jQuery DOM 初始化,但回退到一个简单的 setTimeout()。因此,如果 jQuery DOM 初始化由于 JavaScript 损坏而从未触发,则超时将在页面完成加载后不久触发。
您可以添加多个其他后备 - 如果需要,甚至可以将代码添加到标题中。由于 my_hardened_init() 只运行一次,您可以尝试多次触发它。
这已经在带有一系列其他损坏插件的客户端站点上起作用。
希望这可以帮助。