Estoy usando Channel API en una extensión de Chrome.¿Por qué Google App Engine Channel API (jsapi) no se carga en una extensión de Chrome?
En Google App Engine Channel API Javascript Reference (Python) página dice que
Include the following in your html page before any JavaScript code that refers to it:
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
Por lo tanto, poner esto en la cabecera de mi archivo options.html:
<html>
<head>
<title>Extension Options</title>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
</head>
pero Chrome lanza jsapiFailed to load resource
error. ¿Qué estoy haciendo mal?
actualización
De acuerdo con la respuesta de Moishe He actualizado la llamada a jsapi así:
<head>
<title>Extension Options</title>
<!-- this does not work because it is local
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
-->
<script type="text/javascript" src="https://talkgadget.google.com/talkgadget/channel.js"></script>
</head>
actualización
que añade onopen
y otras propiedades. Ahora recibo la alerta onopen
pero no recibo la alerta evt.data
. ¿Qué estoy haciendo mal?
<html>
<head>
<title>Extension Options</title>
<!-- this does not work because it is local url
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
-->
<script type="text/javascript" src="https://talkgadget.google.com/talkgadget/channel.js"></script>
</head>
<body>
<p>Enter your gmail address:</p>
<textarea id="getEmail" style="margin-bottom: 4px; width: 250px; height: 20px">
</textarea><br />
<button id="save">Save</button>
<!--<button id="save">Clear</button>-->
<script>
document.getElementById("getEmail").placeholder = "your gmail address" ;
//save entered gmail address
document.getElementById("save").addEventListener
(
"click",
function()
{
var userEmail = document.getElementById("getEmail").value;
var formData = new FormData();
formData.append("extension_user", userEmail);
alert("after formData.append")
var channel;
var socket;
var handler =
{
onopen: function() { alert("onopen") },
onerror: function() { alert("onerror") },
onclose: function() { alert("onclose") },
onmessage:
function (evt)
{
//evt.data will be what the server sends in channel.send_message
console.log("evt.data received from authhandler: " + evt.data);
alert("evt.data is: " + evt.data)
}
};
var xhr = new XMLHttpRequest();
//changed to lowercase
xhr.onreadystatechange = function()
{
//alert("xhr.onReadyStateChange")
//error handling etc not included
if (xhr.readyState == 4 && xhr.status == 200)
{
token = xhr.responseText;
alert("token: " + token)
channel = new goog.appengine.Channel(token);
socket = channel.open(handler);
}
};
xhr.open("POST", "http://ting-1.appspot.com/authsender", true);
xhr.send(formData);
console.log("formData sent to authsender: " + formData);
}, false
)
</script>
</body>
</html>
¿Esto está usando el dev_appserver o está en producción? ¿Puedes proporcionar detalles sobre la pestaña "Red" en las herramientas de desarrollo de Chrome? –
Esto está en producción. Primero, no había nada en la pestaña "Red"; luego volví a cargar la página según las instrucciones y veo 2 elementos: options.html y jsapi: name: options.html; Método: GET; Estado: (desde el caché); Tipo: text/html; Tamaño: (desde el caché); Tiempo: 3ms y 'jsapi/_ah/channel; GET, (fallido); indefinido; 30B; 5ms' ¡Gracias! – Zeynel
¿Le importaría decirme su aplicación? ¿Qué sucede si intenta navegar directamente a "http://your-app-id.appspot.com/_ah/channel/jsapi"? –