如何修改Greasemonkey脚本以与chrome兼容?

时间:2011-11-21 21:58:46

标签: jquery google-chrome greasemonkey

从早期的SO post我发现,为了使Greasemonkey脚本与Chrome兼容,我们必须为jQuery创建脚本元素http://erikvold.com/blog/index.cfm/2010/6/14/using-jquery-with-a-user-script

如果我当前在Firefox中工作正常的用户脚本如下。我应该如何修改它以包含上述方法并仍然在onload上调用该函数?我在哪里将当前代码放在早期帖子中建议的解决方案中?

// ==UserScript==
// @name           Google+
// @version        1.1
//
// 
// @include        http://plus.google.com/*
// @include        https://plus.google.com/*
//
// @require        https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js


$(function()
   {

   $(window).bind('load', function()
   {
           console.log("Hi Condition is very bad!")

           $('<div id="vdiv"></div>').prependTo('#contentPane');
           $('<img>',
           {
           src: 'http://icons.iconarchive.com/icons/aha-soft/security/16/key-icon.png',
           alt: 'Key',
           title:'Key',
           click: function(){
           alert($(this).attr('title'));
           var vtext = jQuery('div.f-ba-mg iframe').contents().find('body').text().trim();
           alert(vtext);
           }
           })
           .css({
           cursor: 'pointer',
           border: '1px solid black',
           backgroundColor: 'white'
           })
           .appendTo('#vdiv');
   });
   });

1 个答案:

答案 0 :(得分:1)

嗯,你可以非常肯定脚本在ondomready-event之后执行,这是greasemonkey的正常执行时间(chrome提供了更早的执行时间,但这只是一个特殊选项)。所以没有必要在onload上运行它。所以你可以把它放在任何地方,只要你事先加载jQuery。

Erik的解决方案可以通过创建1个init函数(通常在.ready()运行),并使用addJquery(init-function);

顺便说一句,我的包含jQuery的方法是将它添加到脚本本身,因为否则必须为每个页面加载(这是一个减速),所以我在脚本中有一个缩小版本的jQuery和其他一些解决方案,见http://userscripts.org/scripts/review/52341 (顺便说一句,我作为维护者进来,代码远非完美)。

那里的解决方案:

1。)jQuery上有一些注释行,后面是jQuery 1.4.4的改编版和修改版(由于greasemonkey环境和普通文档范围之间存在细微差别)。

2。)就在这些行之上,我正在使用localStorage在Chrome上重新创建一些greasemonkey的功能。

3.。)greasemonkey中的unsafeWindow大约等于chrome中的窗口,但仅适用于浏览器本身提供的功能(其他人被chrome阻止,因为它们不安全)。没有使用很多,只有unsafeWindow.console.log()和一些不太重要的东西afaik。

但是对于你的情况,erik的方法也适用:

$(function(){
  $(window).bind('load', function(){
    ...
  });
});

addJquery(function() {
  ...
});