5

Sto utilizzando l'API canale in un'estensione di Chrome.Perché l'API canale di Google App Engine (jsapi) non viene caricata in un'estensione di Chrome?

In Google App Engine Channel API Javascript Reference (Python) pagina si dice che

Include the following in your html page before any JavaScript code that refers to it:

<script type="text/javascript" src="/_ah/channel/jsapi"></script> 

Così, ho messo che nell'intestazione del mio file options.html:

<html> 
<head> 
    <title>Extension Options</title> 
    <script type="text/javascript" src="/_ah/channel/jsapi"></script> 
</head> 

ma Chrome getta jsapiFailed to load resource errore. Che cosa sto facendo di sbagliato?

Aggiornamento

Come per la risposta di Moishe ho aggiornato la chiamata a JSAPI in questo modo:

<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> 

Aggiornamento

ho aggiunto onopen e altre proprietà. Ora ricevo l'avviso onopen ma non ricevo l'avviso evt.data. Che cosa sto facendo di sbagliato?

<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> 
+0

E 'questo che usa dev_appserver o in produzione? Puoi fornire dettagli per la scheda "Rete" negli strumenti di sviluppo di Chrome? –

+0

Questo è in produzione. Innanzitutto non c'era nulla nella scheda "Rete"; poi ho ricaricato la pagina come indicato e vedo 2 voci: options.html e jsapi: name: options.html; Metodo: GET; Stato: (dalla cache); Type: text/html; Dimensione: (dalla cache); Tempo: 3 ms e 'jsapi/_ah/canale; OTTIENI, (fallito); non definito; 30B; Grazie! – Zeynel

+0

Ti dispiace dirmi il tuo appid? Cosa succede se provi a navigare direttamente su "http://your-app-id.appspot.com/_ah/channel/jsapi"? –

risposta

3

In un'estensione Chrome, è necessario specificare direttamente il percorso per il javascript Channel (https://talkgadget.google.com/talkgadget/channel.js). La richiesta di/_ah/channel/jsapi non può essere reindirizzata da nulla perché il file che sta tentando di caricarlo è locale.

+0

Siamo spiacenti, riguardo al titolo che avrei dovuto citare "estensione di Chrome". Ora non ottengo l'errore originale ma ne ottengo un altro e non sono sicuro che sia correlato al mio codice: 'Uncaught TypeError: La proprietà 'onopen' dell'oggetto [oggetto Object] non è una funzione' su linea 77 di channel.js. È correlato a un problema con la mia 'funzione (evt)'? Grazie ancora. – Zeynel

+0

Non so se è rilevante ma la scheda di rete mostra GET 200-OK per 'bind 235.talkgadget.google.com/talkgadget/dch' – Zeynel

+1

È necessario specificare un callback onopen nel gestore. –