У меня есть веб-страница, которую я хочу использовать API канала Google App Engine с. У меня есть токен, созданный с помощью внешней библиотеки, которая загружается в этот очень, очень простой javascript.
<html lang="en">
<body>
<script src="jquery-1.6.3.min.js" ></script>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script type="text/javascript">
var token, channel, socket;
var onOpened = function() {
document.body.innerHTML += "<br>Open!";
};
var onMessage = function(msg) {
document.body.innerHTML += "<br>Message: " + msg;
};
var onChannelError = function(error) {
document.body.innerHTML += "<br>Error! :'("
};
var onClose = function(e) {
document.body.innerHTML += "<br>Close :(";
};
var handler = {
onopen: onOpened,
onmessage: onMessage,
onerror: onChannelError,
onclose: onClose
};
var openChannel = function(t) {
token = t;
channel = new goog.appengine.Channel(token);
socket = channel.open(handler);
};
</script>
</body>
</html>
Когда я запускаю этот код (вызывая openChannel с моим токеном канала), вызывается метод onOpen (поэтому HTML изменяется и не говорит «Открыть!». Мой сокет var выглядит следующим образом:
rf {readyState: 1, cc: Array[0], onopen: function, onmessage: function, onerror: function…}
И когда я смотрю на сетевой журнал ChromeInspector, после того, как канал открыт, я вижу, что браузер теперь успешно опрашивает (не уверен, что это правильный термин) talkgadget.google.com. В ответ он получает то, что выглядит совершенно нормально. Я получаю много цифр, скобок и ["noop"] в большинстве ответов. И если я вручную запускаю уведомление на сервере, мой клиент получает информацию об уведомлении в своем запросе! Но мой socket.onmessage до сих пор не вызывается!
Вот скриншот моей сетевой вкладки в то время.
Вызов socket.onmessage({}) вручную изменяет DOM на «Message: [object Object]», поэтому мой обработчик не кажется проблемой. И на всякий случай там есть точка останова. Если я вызываю socket.close(), моя функция onClose также вызывается правильно.
Это сводит меня с ума, поэтому большое спасибо за любую помощь или совет, который вы можете мне дать!