2016-11-21 49 views
0

我如何在篡改密鑰的谷歌搜索框中設置一些文本?Tampermonkey - 如何在谷歌搜索框中設置文本?

我曾嘗試以下,但沒有文字設置:

// ==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

有一個名爲庫[*** ArriveJS ***](https://github.com/uzairfarooq/arrive),這將監視DOM元素創建和清除量。您可以只聽該選擇器出現在頁面上。 –

+0

謝謝,該圖書館看起來很有用 – zeddex

回答

0

你的選擇是正確的。您可以通過在JavaScript控制檯中輸入代碼document.querySelector('input.gsfi[type=text]')來簡單檢查。它應該顯示正確的元素。

Google網站的問題是在調用Tampermonkey函數(可能通過一些JavaScript)之後添加input元素的類。

這樣一種解決方法可能是一個短的時間間隔後檢查輸入元素:

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

而不是死在'null'上,你可以限制超時被調用的次數,並且一直反覆調用,直到達到限制。 –

+0

完美,它的作品非常棒,我會接受這個答案,當它讓我。它應該是,因爲它表明編輯器中有錯誤。 – zeddex

1

可以等待到達的元素。只要通過一個限制和每次檢查之間等待的毫秒數。

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

我已經接受了一個答案,但感謝這看起來非常有用 – zeddex