5

Tôi đang sử dụng API kênh trong tiện ích của Chrome.Tại sao API kênh Google App Engine (jsapi) không tải trong tiện ích của Chrome?

Trong Google App Engine Channel API Javascript Reference (Python) trang nó nói rằng

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

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

Vì vậy, tôi đặt rằng trong tiêu đề của tập tin options.html tôi:

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

nhưng Chrome ném jsapiFailed to load resource lỗi. Tôi đang làm gì sai?

Cập nhật

Như mỗi câu trả lời Moishe của tôi cập nhật các cuộc gọi đến jsapi như thế này:

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

Cập nhật

tôi thêm onopen và các tài sản khác. Bây giờ tôi nhận được thông báo onopen nhưng tôi không nhận được cảnh báo evt.data. Tôi đang làm gì sai?

<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

Đây có phải là máy chủ dev_appserver hoặc đang được sản xuất không? Bạn có thể cung cấp bất kỳ chi tiết nào cho tab "Mạng" trong các công cụ dành cho Chrome không? –

+0

Sản phẩm này đang được sản xuất. Đầu tiên không có gì trong tab "Mạng"; sau đó tôi tải lại trang theo hướng dẫn và tôi thấy 2 mục: options.html và jsapi: name: options.html; Phương thức: GET; Trạng thái: (từ bộ nhớ cache); Loại: văn bản/html; Kích thước: (từ bộ nhớ cache); Thời gian: 3ms và 'jsapi/_ah/channel; GET, (thất bại); chưa xác định; 30B; 5ms' Cảm ơn! – Zeynel

+0

Bạn có phiền khi nói cho bạn biết về appid của bạn không? Điều gì sẽ xảy ra nếu bạn cố điều hướng trực tiếp đến "http://your-app-id.appspot.com/_ah/channel/jsapi"? –

Trả lời

3

Trong tiện ích chrome, bạn sẽ cần chỉ định trực tiếp đường dẫn cho javascript kênh (https://talkgadget.google.com/talkgadget/channel.js). Không thể chuyển hướng yêu cầu cho/_ah/channel/jsapi bởi bất kỳ điều gì vì tệp đang cố tải tệp đó là cục bộ.

+0

Xin lỗi, về tiêu đề tôi nên đề cập đến "tiện ích của Chrome". Bây giờ tôi không nhận được lỗi ban đầu nhưng tôi nhận được một lỗi khác và tôi không chắc chắn nếu nó có liên quan đến mã của tôi: 'Uncaught TypeError: Property 'onopen' của đối tượng [object Object] không phải là một hàm' trên dòng 77 của kênh.js. Điều này liên quan đến một vấn đề với 'hàm (evt)' của tôi? Cảm ơn một lần nữa. – Zeynel

+0

Tôi không biết liệu nó có liên quan hay không nhưng tab mạng hiển thị GET 200-OK cho 'bind 235.talkgadget.google.com/talkgadget/dch' – Zeynel

+1

Bạn cần chỉ định một cuộc gọi lại trên màn hình trong trình xử lý của mình. –

Các vấn đề liên quan