Отображение имен переменных (или всего) в окне [], html / javascript - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь сделать 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, строками, объектами массива и т. Д., То есть глобальными переменными, которые я создал в других скриптах на странице.

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Вы на самом деле не задавали конкретного вопроса, но я думаю, что вы пытаетесь сказать: «Как мне получить имя каждого свойства window

В вашем существующем коде вы используете цикл for-in для просмотра различных свойств. Я думаю, вам нужно знать, что ваша переменная индекса будет содержать имя (текущего) свойства:

for (i in window) {
  alert("Property name: " + i);
  alert("Property value: " + window[i]);
}
1 голос
/ 15 июля 2011

Используемая вами циклическая конструкция предоставит эту информацию:

for (i in window) {
    // at the point, i is a string containing the name of the property
    // window[i] contains the value of that property
    document.write('window.' + i + ' is ' + window[i] + '<br>');
}

, но, как задал другой плакат, - почему вы не можете использовать firebug lite?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...