我有一个使用GAE频道api的简单完整应用。它可以在我的本地机器上运行,但是当我将它上传到appspot时,通道api应该显示为空的应用程序将显示为空并且应用程序失败并显示消息"找不到goog"。
服务器:
import webapp2
import jinja2
import os
import time
import logging
channel_key = 'key'
class MainHandler(webapp2.RequestHandler):
def get(self):
token = channel.create_channel("1")
template_values = {'token': token}
template = env.get_template('index.html')
self.response.write(template.render(template_values))
class OpenedHandler(webapp2.RequestHandler):
def post(self):
channel.send_message("1", "hi")
logging.info("send hi");
env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
app = webapp2.WSGIApplication([
('/', MainHandler),
('/opened', OpenedHandler)
], debug=True)
客户:
<!DOCTYPE html>
<html>
<body>
<div id="debug">_</div>
<!--
<script src="https://talkgadget.google.com/talkgadget/channel.js"></script>
<script type="text/javascript" src="/static/channel.js"></script>
-->
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script>
function debug(s) {
document.getElementById("debug").innerHTML = s;
}
my_func = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/opened');
xhr.send();
}
onOpened = function() {
debug("open");
setTimeout(my_func, 2000);
};
onMessage = function(message) {
alert("something recieved");
alert(message);
}
channel = new goog.appengine.Channel("{{token}}") // this is where it fails
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = function(e){
alert("error:"+e['description']);
};
socket.onclose = function(){
alert("close");
};
</script>
</body>
</html>
在我的本地计算机上,调用onOpened函数并发送消息。当安装在appspot上时,我得到了
"Uncaught ReferenceError: goog is not defined"
之后
channel = new goog.appengine.Channel("{{token}}")
当我查看Developer工具窗口的Resources选项卡并单击&#34; jsapi&#34;它似乎是空的:
figure http://www.sonic.net/~crb/foo.png
我已尝试过其他网址,您可以在html中看到这些注释,但没有任何效果。我很确定这是正确的,我无法解释为什么api看起来是空的,因此&#39; goog&#39;没有定义。
感谢您的任何建议。
答案 0 :(得分:1)
我有同样的问题。看看您是否在</body>
应答之前添加了以下代码。
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
这修复了我的&#34; goog找不到&#34;错误。
答案 1 :(得分:1)
对我而言,原来这是由Chrome的Disconnect插件引起的,该插件阻止了/ _ah / channel / jsapi重定向到的网址。唯一的解决方案是禁用该页面的Disconnect。
我要告诉Disconnect开发人员不应该阻止该URL,因为它可能会为加载它的任何页面提供重要的功能。