【问题标题】:Greasemonkey script compatibility with Firefox, Safari, Opera and chrome (onload event)Greasemonkey 脚本与 Firefox、Safari、Opera 和 chrome 的兼容性(onload 事件)
【发布时间】:2010-12-06 03:18:56
【问题描述】:

假设您希望 Greasemonkey 脚本与 Safari 和 Chrome 兼容。

而在 Firefox 中,Greasemonkey 脚本仅在 DOM 准备好时运行。 Chrome、Safari 和 Opera 似乎在 DOM 准备好之前运行 Greasemonkey 脚本。

所以我正在寻找一种解决方案,它只会在页面上运行一个监听器,等待 DOM 加载/就绪事件,并在接收到该事件时,然后运行脚本的其余部分。如果他们使用的浏览器是 Chrome、Safari 或 Opera。如果他们使用的是 Firefox,只需立即运行脚本,不要打扰事件侦听器。

如何编码?

@NV

感谢 NV,您知道该脚本是否也与 Google Chrome 兼容?

请问代码

(function(){

    // Code here run after 'load' event in all browsers.

})();

也可以在 Google Chrome 中的 DOM 上运行?

【问题讨论】:

    标签: firefox safari google-chrome greasemonkey opera


    【解决方案1】:

    首先,看看Nice alertUserJS。它适用于 Greasemonkey、Opera 和 Safari Greasekit。

    如果您想在页面加载后运行一些代码,则根本不需要事件监听器。

    ... safari + 歌剧,似乎在 dom 准备好之前运行 gm 脚本。

    没有。实际上,它更复杂。 Opera 有greasemokey compatible mode。所有名为 yada-yada.user.js 的脚本都以兼容模式运行,并在 DOM 准备就绪后运行。

    注意:将您的代码包装到匿名函数中,以防止变量泄漏到全局窗口对象中(这发生在 Opera 中)。

    (function(){
    
      // Some code
    
    })();
    

    在这种情况下,Safari Greasekit 的工作方式类似于 Firefox Greasemonkey。

    【讨论】:

    • 简单地将代码包装在匿名函数中不会延迟执行直到加载事件之后。因此,上述答案的第一部分是错误且具有误导性的。
    • 哈尔沃斯,你是对的!可能我说的不是很清楚。我已经更新了答案。
    【解决方案2】:

    我把缩小的 jQuery 复制粘贴到我的用户脚本中,然后做经典的

      $(document).ready(function() {
          // Put all your jQuery goodness in here.
      });
    

    还有一个额外的好处是给你 jQuery,所有这些都包含在另一个问题中提到的函数中:

    (function(){
    
      // Some code.
    
    })();
    

    您可以使用 Greasemonkey 的东西通过顶部的 URL 导入 jQuery,但这是 Greasemonkey 特定的,如果您这样做,Chrome/Opera 等将不兼容。

    【讨论】:

      【解决方案3】:

      我想您可能会看看像 JQuery 这样的 JavaScript 库是如何实现这一点的。实际使用它可能太重了,但他们肯定已经解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-13
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        相关资源
        最近更新 更多