Странный вывод с console.log (5) - PullRequest
1 голос
/ 03 января 2012

У меня самое простое расширение Chrome, которое содержит контентный javascript (ничего больше):

script="\
c=0;\
(function f() {\
    if (++c>20) return;\
    console.log(5);\
    setTimeout(f, 500);\
})();\
";
scriptBlock = document.createElement('script');
scriptBlock.type = 'text/javascript';
scriptBlock.appendChild(document.createTextNode(script));
document.getElementsByTagName('head')[0].appendChild(scriptBlock);

Это просто добавляет маленький кусочек js в элемент head.В mail.google.com вывод на консоль составляет 4 пятерки, за которыми следует шестнадцать Resource interpreted as Other but transferred with MIME type undefined.. На каждом другом сайте отображается просто 20 пятерок.

Может кто-нибудь объяснить это поведение, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Вы используете глобальную переменную в вашем скрипте. Если сценарий на странице использует глобальную переменную с тем же именем, он изменит значение в переменной, и ваш сценарий покажет это значение.

1 голос
/ 03 января 2012

Как сказал @Guffa, ваша глобальная переменная может быть перезаписана.Включение этого в закрытие обеспечит доступ к нему только для вашего кода.

(function () {
    var c = 0;

    setTimeout(function f() {
        if (++c > 20) return;

        console.log(5);

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