【问题标题】:Waiting for Modernizr to load jQuery from a user script等待 Modernizr 从用户脚本加载 jQuery
【发布时间】:2012-09-30 06:06:54
【问题描述】:

我正在开发一个 Google Chrome 用户脚本,它可以增强通过 Modernizr's .load() method 加载 jQuery 的网站。

我将使用网站的 jQuery 实例,但用户脚本在 jQuery 加载之前开始执行。

是否有确定的方法从 Greasemonkey 脚本或用户脚本中截获 Modernizr 的 load() / complete 机制?

还是轮询window[jQuery] / '$' in window 等是唯一的解决方案?

(我试图避免加载我自己的 jQuery 实例,并且通过轮询,我有时会错过使用 mutation observers 拦截的文档的第一次更改。)

【问题讨论】:

    标签: jquery greasemonkey userscripts modernizr


    【解决方案1】:

    我不确定你想做什么,但下面的脚本可能会对你有所帮助。它会延迟你的 html 页面中的任何内联脚本,并会在 Modernizr 在返回时加载所有脚本后执行。

    在modernizr加载函数之前定义以下行。

    docready=[],$=function(){return{ready:function(fn){docready.push(fn)}}},
    

    在modernizr加载完成时写下脚本

    $ = jQuery;
    jQuery(document).ready(function() {
        for(n in docready) docready[n]();
    });
    

    【讨论】:

    • 如何在用户脚本中“在modernizr加载函数之前定义一行”?所有modernizr 代码都在第3 方网站中,我无法更改其代码。也许我只是误会了什么。
    • 就在你加载modernizr脚本之前,在你的用户脚本中。
    • 也许我没有说清楚我没有在我的用户脚本中加载modernizr,第3方网站通过其<head>中的常规<script>标签直接加载它。
    【解决方案2】:

    听起来你需要等待 window.onload ,它会在所有内容都加载后触发。

    Document-end 和 document-idle 都保证在整个 DOM 被解析后运行,这通常是脚本开发人员感兴趣的事情。如果由于某种原因你真的需要你的脚本在 window.onload 之后运行,你可以检查 document.readystate 属性。如果它是“完整的”,那么您可以假设已经发生了 onload。如果不是,那么你可以监听 onload。

    【讨论】:

    • 我感觉网站只有在收到onload 后才开始加载 jQuery,但我会回去检查一下。谢谢...
    • 可悲的是,我现在只是偶尔获得互联网连接,所以我还没有回到这个问题上,我的代码仍然使用到目前为止有效的轮询,但它的不确定性仍然困扰着我。
    • 啊,对了。我期待看到你想出什么:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多