Как изменить скрипт Greasemonkey, чтобы он был совместим с Chrome? - PullRequest
1 голос
/ 22 ноября 2011

Из более ранних ТАК я обнаружил, что для совместимости скрипта 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 Ответ

1 голос
/ 22 ноября 2011

Эмм, вы можете быть почти уверены, что скрипт выполняется после события ondomready, это обычное время выполнения greasemonkey (chrome предлагает более раннее время выполнения, но это просто специальная опция).Так что нет необходимости запускать его при нагрузке.Таким образом, вы можете поместить его куда угодно, если заранее загрузите jQuery.

Решение Эрика будет работать путем создания 1 init-функции (что обычно выполняется в .ready ()) и использования addJquery (init-function);

Кстати, мой метод для включения jQuery заключается в добавлении его в сам скрипт, так как в противном случае он должен быть загружен для каждой страницы (что является замедлением), поэтому у меня есть уменьшенная версияjQuery в скрипте и некоторых других решениях, см. http://userscripts.org/scripts/review/52341 (кстати, я пришел в качестве сопровождающего, код далек от совершенства).

Решения есть:

1.) В верхней части jQuery есть несколько строк комментариев, за которыми следует адаптированная и модифицированная версия jQuery 1.4.4 (поскольку существуют небольшие различия между средой greasemonkey и обычной областью документа).

2.)Чуть выше этих строк я использую localStorage для воссоздания некоторых функций greasemonkey в Chrome.

3.) UnsafeWindow в greasemonkey примерно равен окну в chrome, нотолько для функций, которые предлагает сам браузер (другие заблокированы chrome, так как они небезопасны).Не очень много, только unsafeWindow.console.log () и некоторые менее важные вещи afaik.

Но для вашего случая метод Эрика тоже работает:

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

до

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