ANSI - это институт стандартов. По сути, не существует такой кодировки. Часто под ANSI понимают однобайтную кодировку, выбранную в данный момент в системе пользователя. Но надеяться на то, что на машине пользователя будут точно те же региональные настройки, не стоит.
Можно повесить обработчик на какой-нибудь родительский элемент, к примеру, body. А в обработчике уже проверять target, и если он является одной из вкладок - делать нужное действие. Такой подход хорош тем, что можно будет в рантайме добавлять новые вкладки и не заботиться о том, что придётся снова обработчик на каждую новую вешать.
Да, нужно. Для браузера Google Chrome не обязательно, но Firefox не умеет unicode-range, и для него google fonts возвращает шрифт только с латиницей, если явно не указана поддержка кириллицы.
Изгадите себе карму и никогда от этого не отмоетесь. Хотя существование кармы, ада и прочих религиозных аттрибутов научно не доказано, но и не опровергнуто, загонять себя в болото ради лёгкой наживы - очень глупо.
Порт, который пробрасываете, и порт, на который пробрасываете, может отличаться. Попробуйте в качестве порта назначения указать 3389 в правиле проброса порта.
Дело в том, что Вы путаете синхронные и асинхронные функции. Асинхронные выполняются не сразу, потому результат они не возвращают, а вызывают коллбэк. Вот в коллбэке и нужно что-нибудь делать с полученным значением. По сути, ваш код будет выполнен в таком порядке:
1. var tmp = {};
2. Начинает работать connection.query
3. console.log(tmp);
(Через некоторое время)
4. connection.query заканчивает свою работу и вызывает вашу безымянную функцию function(err, result){ ... }
5. tmp.names = result[0];
6. console.log(tmp.names);