Я пытаюсь сделать Firebug для бедного человека внутри HTML-страницы. Я создал внешний скрипт, который находится где-то на целевой странице. Инициализируется с <body onload="monitor_init()">
. Он также вводит таблицу стилей, чтобы абсолютно позиционировать частично непрозрачную таблицу с результатами.
Таким образом, он просматривает все (значения) в window[]
, отображает его в одном столбце, а также typeof(window[i])
в другом столбце. Я также хотел бы иметь другой столбец, который отображает имя переменной или объекта.
function monitor_init()
{
var css = document.createElement("link");
css.setAttribute("href","jsmonitor.css");
css.setAttribute("rel","stylesheet");
css.setAttribute("type","text/css");
document.getElementsByTagName("head")[0].appendChild(css);
var temp = document.createElement("div");
temp.setAttribute("id","monitor_box");
var temp2 = document.createElement("table");
temp2.setAttribute("id","monitor_output");
temp.appendChild(temp2);
document.body.appendChild(temp);
monitor();
}
var monitor_speed = 100;
function monitor()
{
while(document.getElementById("monitor_output").childNodes.length > 0)
{
document.getElementById("monitor_output").removeChild(document.getElementById("monitor_output").lastChild);
}
for (i in window)
{
if (["function","undefined"].indexOf(typeof(window[i]))!=-1)
{
continue;
}
// This is where I tried to make a first column displaying the name, couldn't find anything that worked.
// Disregard the .name, that was just last-ditch stuff
//var temp = document.createElement("tr");
//var temp2 = document.createElement("td");
//temp2.appendChild(document.createTextNode(window[i].name));
//temp.appendChild(temp2);
var temp = document.createElement("tr");
var temp2 = document.createElement("td");
temp2.appendChild(document.createTextNode(typeof(window[i])));
temp.appendChild(temp2);
var temp2 = document.createElement("td");
temp2.appendChild(document.createTextNode(window[i]));
temp.appendChild(temp2);
document.getElementById("monitor_output").appendChild(temp);
}
setTimeout("monitor()",monitor_speed);
}
Используя typeof, я смог пропустить отображение значений функций и некоторых неопределенных вещей. Я надеялся, что если бы я мог получить доступ к имени, я мог бы также пропустить такие вещи, как история, местоположение и другие вещи, которые не являются числами JavaScript, строками, объектами массива и т. Д., То есть глобальными переменными, которые я создал в других скриптах на странице.