2016-11-21 1 views
0

Comment puis-je définir du texte dans le champ de recherche google avec tampermonkey?Tampermonkey - Comment mettre du texte dans le champ de recherche google?

J'ai essayé ce qui suit, mais aucun texte est défini:

// ==UserScript== 
// @name   Google Search Test 
// @namespace http://tampermonkey.net/ 
// @version  0.1 
// @description Testing selectors. 
// @author  You 
// @match  https://www.google.co.uk* 
// @grant  none 
// ==/UserScript== 

(function() { 
    'use strict'; 

    var textinput = document.querySelector('input.gsfi[type=text]'); 
    textinput.value = "Cats"; 
})(); 
+1

Il y a une bibliothèque appelée [*** ArriveJS ***] (https://github.com/uzairfarooq/arrive) qui veillera à la création d'éléments DOM et les renvois. Vous pouvez simplement écouter pour que ce sélecteur apparaisse sur la page. –

+0

Merci, cette bibliothèque semble utile – zeddex

Répondre

0

Votre sélection est correcte. Vous pouvez simplement vérifier cela en tapant le code document.querySelector('input.gsfi[type=text]') dans la console JavaScript. Il devrait montrer l'élément correct. Le problème avec le site Web de Google est que la classe de l'élément d'entrée est ajoutée après l'appel de la fonction Tampermonkey (peut-être avec du JavaScript).

Ainsi, une solution pourrait être de vérifier l'élément d'entrée après un court intervalle:

function test() { 
    var textinput = document.querySelector('input.gsfi[type=text]'); 
    if (textinput!==null) 
     textinput.value = "Cats"; 
    else 
     console.log("textinput is null"); 
} 

(function() { 
    'use strict'; 
    setTimeout(test, 1000); 
})(); 
+1

Au lieu de mourir sur 'null', vous pourriez avoir une limite sur le nombre de fois que le délai d'attente est appelé et continuer à l'appeler encore et encore jusqu'à ce que la limite soit atteinte. –

+0

Parfait, ça marche super, j'accepte cette réponse quand ça me le permet. Il devrait être! == d'ailleurs comme il a suggéré qu'il y avait une erreur dans l'éditeur. – zeddex

1

Vous pouvez attendre que l'élément d'arriver. Il suffit de passer une limite et le nombre de ms que vous attendez entre chaque vérification.

function onArrival(selector, callback, interval, limit) { 
 
    interval = interval || 1000; // Default wait time is 1 second. 
 
    limit = limit || 10;   // Default number of attempts is 10. 
 
    var el = document.querySelector(selector); 
 
    if (el != null) { 
 
    if (callback != null) { 
 
     callback(el); 
 
    } 
 
    } else { 
 
    if (limit > 0) { 
 
     setTimeout(function() { 
 
     onArrival(selector, callback, interval, limit - 1); 
 
     }, interval); 
 
    } else { 
 
     console.log('Element not found!'); 
 
    } 
 
    } 
 
} 
 

 
// Wait 3 seconds to load the input element. 
 
setTimeout(function() { 
 
    var label = document.createElement('label'); 
 
    label.innerHTML = 'Google Search: '; 
 
    document.body.appendChild(label); 
 
    
 
    var input = document.createElement('input'); 
 
    input.setAttribute('type', 'text'); 
 
    input.className = 'gsfi'; 
 
    document.body.appendChild(input); 
 
}, 3000); 
 

 
// Wait 5 times, 1 second at a time, for the input element to arrive. 
 
onArrival('input[type="text"].gsfi', function(el) { 
 
    el.value = 'Cats'; 
 
}, 1000, 5)

+0

J'ai accepté une réponse mais merci cela semble vraiment utile – zeddex