【问题标题】:Hook IIFE (self-calling) javascript functionsHook IIFE(自调用)javascript函数
【发布时间】:2016-12-24 09:19:51
【问题描述】:

我想挂钩 IIFE 函数:

(function(p) {
   // stuff
})();

我在一般意义上问这个问题,尽管具体原因是 WordPress 插件经常将内联脚本直接放入正文输出中。如果你因为 SEO 的原因想要延迟(异步)加载依赖,它自然会失败。

为了解决插件提供者无休止的糟糕编码实践,以及在设计时根本没有考虑到异步加载的插件,我想做这样的事情。

我试图避免:

  1. 直接修改供应商代码。
  2. 使用 PHP 解析原始内容。
  3. 阻止加载 JavaScript 资源的现有服务器端系统,以便以后适当地加载它们。

我想知道浏览器 dom 中是否有一些极低级别的原型可以用来拦截这种性质的函数?

【问题讨论】:

  • 仅供参考,这称为IIFE(立即调用的函数表达式)
  • 谢谢!更新了标签和标题
  • 不幸的是,答案是简单的“不”,浏览器中没有为此而设的低级挂钩。如果你有这种能力,你具体会做什么?如果您确切地指定了您正在尝试做的事情,它会更有效率,并且可能有更好的方法来解决这个问题。
  • 如果您编写了一个修改插件删除的外部脚本标签的钩子,您将需要编写一个也修改内联脚本标签的钩子。
  • 修复那些在设计时根本没有考虑到异步加载的插件”——这将非常困难。他们可能会使用document.write 之类的。

标签: php wordpress asynchronous hook script-tag


【解决方案1】:

所以我最终做了我想避免的事情。它有点脏,但效果很好。我会分享,但保密协议。如果可能的话,我会尝试将其作为拉取请求提交给较大的 SEO/缓存插件之一(可能是 Better Wordpress 缩小版)。

它会扫描输出缓冲区中的问题脚本和样式,并将它们调整为符合 Google SEO(非阻塞)。我想这对 gen-pop 来说永远都行不通,因为这个世界上糟糕的编码数量是无穷无尽的,而且我认为当处理所有用例时,正则表达式会变得非常臃肿。

它依赖于 loadCSS 和某种形式的原生 DocumentContentLoaded 在头部内联定义,首先强制所有源脚本被延迟,清理设计为在其自己的脚本标签中执行的 javascript,并将正文脚本移动到一个可以在合适的时候调用的函数。 全部使用正则表达式。

以下是给有兴趣做类似事情的人的一些建议:

向这里提供的所有 cmets 和帮助大喊大叫,如果不​​先与你们交谈,甚至不会尝试。感谢指点和建议,我们下期再见!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-09-22
    • 2013-05-31
    • 2021-04-24
    • 2017-08-30
    相关资源
    最近更新 更多