I have been trying to write my first user script for Google Chrome. It check the router page and reconnect until it gets a valid IP address.
I saved the script as IPchecker.user.js and installed it in google chrome via extensions page. But when I refresh the page, the javascript console throw an error:
Uncaught TypeError: Cannot call method 'getElementsByClassName' of null
From my understanding, this means that it does not know what document is. But how could this happen? I thought the script will be run AFTER the document has been ready? Is it not true? Here’s the code which works in javascript console.
// ==UserScript==
// @name WAN checker
// @version 0.0.1
// @description Check tomato IP addresses and reconnect as needed
// @match *://192.168.1.1/status-overview.asp
// ==/UserScript==
(function reconnect() {
wan1ip = document.getElementById('wan1ip').getElementsByClassName('content')[0].innerText.split('.').slice(0,2).join('.');
if (wan1ip != "333.3333") {
wan_connect("1");
setTimeout("reconnect()",2000);
}
wan2ip = document.getElementById('wan2ip').getElementsByClassName('content')[0].innerText.split('.').slice(0,2).join('.');
if (wan2ip != "333.333") {
wan_connect("2");
setTimeout("reconnect()",2000);
}
})();
You’re not calling it on
document. You’re calling it onMake sure the element exists.
For testing, you can break it up and do
That will show you what element you’re doing
getElementsByClassNameon and then whatever elements of that class it finds in it. I bet the first one will be null.This will also work but probably won’t get you the result you’re looking for: