используя канал google app engine из расширения Chrome - PullRequest
3 голосов
/ 26 ноября 2011

вот код, который выполняется в расширении, в background.html.

function onLoad()
{

    var path="http://localhost:8082/index.htm?key=1234";
    xhr.open('get', path, false);
    xhr.send();
    token=xhr.responseText;
    caughtMsg=token+" *** ";
    var channel = new goog.appengine.Channel(token);
    var handler = {
      'onopen': function(){caughtMsg+=" *** open";},
      'onmessage': onMessage,
      'onerror': function(e){caughtMsg+=" *** err "+e.description+" "+e.code},
      'onclose': function(){caughtMsg+=" *** close";}
    };
    var socket = channel.open(handler);
    socket.onmessage = onMessage;

}

он взаимодействует со скриптом локального сервера (на python), который создает канал и возвращает токен. затем токен используется для создания объекта канала на стороне клиента. вместо этого, что я получаю из совокупных ответов:

channel-354645736-1234 * ошибочный недействительный + токен 401 * close

когда я делаю это вне области расширения (не используя ajax для установления соединения), это работает как шарм.

куда я могу сбиться с пути?

1 Ответ

2 голосов
/ 18 февраля 2012

Как я вижу из вашего комментария, у вас были проблемы с тестированием API канала в вашей локальной системе разработки.

Это сработало для меня, когда я скачал channel.js (вместо использования http://*.appspot.com/_ah/channel/jsapi) и использоваллокальная копия в фоновом скрипте

<script type="text/javascript" src="/lib/channel.js"></script>

В файле channel.js измените строку, определяющую

goog.appengine.DevSocket.BASE_URL = "http://localhost:8080/_ah/channel/";

, чтобы представить вашу локальную среду (порт для appengine testserver)

Кроме того, URL, который вы отправляете в xhr.open, должен находиться в разделе «Разрешения» ваших манифестов, в моем случае

"permissions":
  [
    ...,
    "http://localhost:8080/"
  ]

Токены, сгенерированные вашим локальным тестовым сервером appengine, отличаются от токенов в живой системе.так что невозможно смешать два.

...