Como posso usar o jQuery no Greasemonkey?

234

Eu tentei colocar esta linha, mas não funciona:

// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js

O jQuery não funciona no Greasemonkey. Existe outra maneira de usar o jQuery no Greasemonkey?

-

Para todas as pessoas que têm o mesmo problema, você deve enviar o arquivo para o greasespot e instalá-lo a partir daí.

A opção Criar novo script não funcionaria!

Keira Nighly
fonte
14
@Jorge, você não sabia que esse site não tem absolutamente nenhuma mágica? Você pode procurar qualquer coisa com uma extensão de arquivo .user.js.O Greasemonkey perguntará se você deseja instalá-lo. Isso inclui arquivos no seu computador local. Instalar qualquer script é tão simples quanto arrastá-lo para o seu navegador.
Rob Kennedy
5
Parece que agora funciona bem mesmo ao editar o arquivo após a instalação.
Josef Sábl
6
Josef está certo - desde a versão 0.9.0 , o Greasemonkey agora instalará arquivos @required assim que o arquivo for editado.
Rory O'Kane
1
Também não se esqueça de continuar a usar $(document).ready(function() {...});em seu código
Utilizador
1
A maneira mais fácil de atualizar você @requiresé adicionar um hash ou string de consulta ao final da @requireinstrução e alterá-lo sempre que precisar de atualização. Semelhante à maneira como você "esconderia" um favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Respostas:

189

Talvez você não tenha uma versão recente o suficiente do Greasemonkey. Foi a versão 0.8 que foi adicionada @require.

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 

Se você não possui 0,8, use a técnica que Joan Piedra descreve para adicionar manualmente um scriptelemento à página .

Entre a versão 0.8 e 0.9, @requireé processada apenas quando o script é instalado pela primeira vez. Se você alterar a lista de scripts necessários, precisará desinstalar e reinstalar o script; O Greasemonkey baixa o script necessário uma vez na instalação e usa uma cópia em cache posteriormente.

A partir de 0,9, o comportamento do Greasemonkey mudou (para resolver um problema tangencialmente relacionado ), de modo que agora ele carrega os scripts necessários após cada edição; reinstalar o script não é mais necessário.

Rob Kennedy
fonte
Rob, então o que eu preciso fazer? Estou criando meus scripts de usuário usando o link Novo Script de Usuário. Eu adiciono o @require e não funcionou. Então, como posso fazer isso funcionar? Por favor, explique eu quero o método @require ao trabalho porque ele é muito mais elegante do que o método dos elementos roteiro
Keira Nighly
1
Ok, então eu fiz funcionar. Obrigado!!! Carreguei o script no Greasespot e instalei a partir daí.
Keira Nighly
2
Eu imagino que quando você cria um novo script a partir do Greasemonkey, o script é instalado imediatamente. Esse script é o arquivo vazio padrão, o que significa que você perdeu a chance de exigir scripts externos.
Rob Kennedy
Portanto, não há como usar @require em um novo script que você está criando? : /
quano 13/05
4
É bem simples, @Quano. Crie um novo arquivo .user.js, escreva seu script e arraste-o para o navegador para instalá-lo. A limitação de exigir scripts externos só estará presente se você criar o script na interface do usuário do Greasemonkey, mas não há requisitos para usar o Greasemonkey para criar o arquivo de script. Você pode editar o script após a instalação, mas se desejar adicionar novas @requirediretivas, será necessário desinstalar e reinstalar o script para que ele entre em vigor.
Rob Kennedy
81

Se você deseja usar o jQuery em um site onde já está incluído, este é o caminho a seguir (inspirado no BrunoLM):

var $ = unsafeWindow.jQuery;

Sei que essa não era a intenção original da pergunta, mas está se tornando cada vez mais um caso comum e você não excluiu explicitamente esse caso. ;)

Henrik Heimbuerger
fonte
4
Não suportado no Chrome aparentemente - chromium.org/developers/design-documents/user-scripts
Ashley
Trabalhos em scriptish de Firefox!
Gqqnbig
2
Desejará testar se você ainda não o possui: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } No Chrome, um site Jquery já estará disponível.
Jonathon
Hmm. Estou recebendo um erro muito estranho ao usar isso. Isso alert($('.submit_entry').length);gera erros e envia o alerta apropriado ao mesmo tempo.
913 Jonathon
21

Não há absolutamente nada de errado em incluir a totalidade do jQuery no seu script Greasemonkey. Basta pegar a fonte e colocá-la na parte superior do script do usuário. Não é necessário criar uma tag de script, pois você já está executando o JavaScript!

O usuário baixa o script apenas uma vez, portanto, o tamanho do script não é uma grande preocupação. Além disso, se você quiser que seu script Greasemonkey funcione em ambientes não-GM (como os scripts de usuário do estilo GM do Opera ou o Greasekit no Safari), ajudará a não usar construções exclusivas do GM, como @require.

Dan Lew
fonte
7

A solução de Rob é a correta - use @requirecom a biblioteca jQuery e certifique-se de reinstalar o script para que a diretiva seja processada.

Uma coisa que acho que vale a pena acrescentar é que você pode usar o jQuery normalmente depois de incluí-lo em seu script, exceto os métodos AJAX . Por padrão, o jQuery procura XMLHttpRequest, que não existe no contexto Greasemonkey. Eu escrevi sobre uma solução alternativa em que você cria um wrapper para GM_xmlhttpRequest (a versão Greasemonkey do XHR) e usa o jQuery ajaxSetup()para especificar sua versão empacotada como padrão. Depois de fazer isso, você pode usar $.gete $.postcomo de costume.

Você também pode ter problemas com o jQuery, $.getJSONporque ele carrega JSONP usando <script>tags. Isso gera erros porque o jQuery define a função de retorno de chamada no escopo da janela Greasemonkey, e os scripts carregados procuram o retorno de chamada no escopo da janela principal. Sua melhor aposta é usar $.gete analisar o resultado com JSON.parse().

Ryan
fonte
4

Você pode criar um novo script usando o Novo Script de Usuário no Greasemonkey, mas é necessário editar o arquivo config.xml dentro da pasta gm_scripts.

Seu arquivo config.xml deve ter uma sintaxe semelhante à seguinte:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test">
        <Include>http://*</Include>
        <Require filename="jquery.js"/>
</Script>

Observe a <Require>etiqueta.

No seu script, você pode usar a sintaxe direta do jQuery. Verifique se você possui a tag de solicitação no cabeçalho Greasemonkey. Aqui está um exemplo do Hello World:

// ==UserScript==
// @name           Test jQuery
// @namespace      http://www.example.com/jQueryPlay/
// @description    Just a test
// @include        http://*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {  
        alert("Hello world!");
});

Lembre-se de que, após modificar o config.xml, é necessário reiniciar o navegador para que o Greasemonkey recarregue as configurações novamente.

Observe também que você precisa copiar o arquivo jquery.js para a pasta do diretório de scripts para que isso funcione. Eu testei isso, e só funciona se você realmente copiar o arquivo manualmente lá.

JQuerying feliz!

Auspex
fonte
4

Atualização : como o comentário abaixo diz, esta resposta é obsoleta.

Como todo mundo já disse, o @require só é executado quando o script é instalado. No entanto, você também deve observar que atualmente o jQuery 1.4. * Não funciona com o greasemonkey. Você pode ver aqui para obter detalhes: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Você precisará usar o jQuery 1.3.2 até que as coisas mudem.

Conley Owens
fonte
3
Esta resposta está obsoleta a partir da versão GM 0.9 ou posterior.
Brock Adams
3
@Brock: Por quê? Você pode nos explicar noobs?
Trevor Sullivan
1

Você pode obter Component unavailablese importar o script jQuery diretamente.

Talvez seja sobre o que @Conley estava falando ...

Você pode usar

@require        http://userscripts.org/scripts/source/85365.user.js

que é uma versão modificada para trabalhar no Greasemonkey e, em seguida, obter o objeto jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
BrunoLM
fonte
Sei que isso é de 5 anos, mas me pergunto: não é errado obter o objeto jQuery como ele já foi definido na página, referindo-se a ele como unsafeWindow.jQuery?
jj_
0

@requireNÃO é processado apenas quando o script é instalado pela primeira vez! Nas minhas observações, é processado no primeiro tempo de execução! Portanto, você pode instalar um script usando o comando Greasemonkey para criar um script totalmente novo. Você só precisa se preocupar com o fato de não haver o recarregamento da página acionado, antes de adicionar a @requirepeça. (e salve o novo script ...)

Dunstkreis
fonte