Я пишу простое расширение Google Chrome для каналов twitch.tv. Единственная функция, которая мне нужна, — это отправить сообщение в чат, желательно без явного использования текстового поля и кнопки чата.
Просмотрев исходный код аддона BetterTTV, я нашел функцию, отвечающую за отправку сообщений в чат:
App.__container__.lookup('controller:chat').currentRoom.tmiRoom.sendMessage('test message');
Теперь, когда я выполняю это с помощью консоли в Chrome DevTools, все работает отлично.
Однако при использовании его из скрипта содержимого расширения выдается: script1.js:28 Uncaught ReferenceError: App is not defined
Такая же ситуация возникает при попытке использовать window.Ember
(работает в консоли, выдает не определено в скрипте контента).
На всякий случай вот весь тестовый код скрипта контента:
$(document).ready(function() {
setTimeout(function() {
main();
}, 5000);
});
function main() {
var tmi = App.__container__.lookup('controller:chat').currentRoom;
tmi.tmiRoom.sendMessage('TEST');
}
Хотя у меня есть некоторый опыт работы с расширениями для Chrome, мне никогда не приходилось иметь дело с Ember.js. Так же не нашел подобных проблем.
setTimeout
код выполняетmain()
немедленно, а не после задержки. Вы должны использоватьmain
без()
. В настоящее время вы говорите ему выполнить функцию, возвращаемую немедленным выполнениемmain()
. - person Makyen♦   schedule 08.10.2016setTimeout
, который многократно проверяет определениеApp
и продолжает, если это не так, то просто установите другой тайм-аут. Возможно, лучше было бы следить за завершением запроса, который предоставляет код/информацию. - person Makyen♦   schedule 08.10.2016