Google app engine 为什么谷歌应用引擎频道API(jsapi)无法加载到Chrome扩展中?
我正在Chrome扩展中使用Channel API 第页上写着 在任何JavaScript代码之前,在html页面中包含以下内容 指的是: 更新 我添加了Google app engine 为什么谷歌应用引擎频道API(jsapi)无法加载到Chrome扩展中?,google-app-engine,google-chrome,google-chrome-extension,Google App Engine,Google Chrome,Google Chrome Extension,我正在Chrome扩展中使用Channel API 第页上写着 在任何JavaScript代码之前,在html页面中包含以下内容 指的是: 更新 我添加了onopen和其他属性。现在我得到了onopen警报,但我没有得到evt.data警报。我做错了什么 <html> <head> <title>Extension Options</title> <!-- this does not work because it is lo
onopen
和其他属性。现在我得到了onopen
警报,但我没有得到evt.data
警报。我做错了什么
<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>
扩展选项
输入您的gmail地址:
拯救
document.getElementById(“getEmail”).placeholder=“您的gmail地址”;
//保存输入的gmail地址
document.getElementById(“保存”).addEventListener
(
“点击”,
函数()
{
var userEmail=document.getElementById(“getEmail”).value;
var formData=new formData();
formData.append(“扩展名\用户”,userEmail);
警报(“在formData.append之后”)
var通道;
无功插座;
变量处理程序=
{
onopen:function(){alert(“onopen”)},
onerror:function(){alert(“onerror”)},
onclose:function(){alert(“onclose”)},
onmessage:
功能(evt)
{
//evt.data将是服务器在channel.send_消息中发送的内容
log(“从authhandler接收到的evt.data:+evt.data”);
警报(“evt.data为:”+evt.data)
}
};
var xhr=new XMLHttpRequest();
//改为小写
xhr.onreadystatechange=函数()
{
//警报(“xhr.onReadyStateChange”)
//错误处理等不包括在内
如果(xhr.readyState==4&&xhr.status==200)
{
令牌=xhr.responseText;
警报(“令牌:+令牌)
通道=新的goog.appengine.channel(令牌);
socket=channel.open(处理器);
}
};
xhr.open(“POST”http://ting-1.appspot.com/authsender“,对);
xhr.send(formData);
log(“发送给authsender的formData:+formData”);
},错
)
在chrome扩展中,您需要直接指定通道javascript的路径(https://talkgadget.google.com/talkgadget/channel.js). 无法通过任何方式重定向对/\u ah/channel/jsapi的请求,因为尝试加载它的文件是本地文件。这是使用dev\u appserver还是在生产中?你能提供Chrome开发工具中“网络”选项卡的详细信息吗?这正在生产中。首先,“网络”选项卡中没有任何内容;然后我按照说明重新加载了页面,我看到了两个项目:options.html和jsapi:name:options.html;方法:获取;状态:(来自缓存);类型:text/html;大小:(来自缓存);时间:3ms和jsapi/\u-ah/通道;GET,(失败);未定义;30B;5毫秒
谢谢!你介意告诉我你的appid吗?如果您尝试直接导航到“”,会发生什么情况?确定它是ting-1,因此当我使用应用程序id粘贴上面的内容时,它会重定向到页面上的一堆代码如果它直接从浏览器工作,您的应用程序对/_ah/channel/jsapi的“options.html”请求有什么不同?options.html是否托管在ting-1.appspot.com上?(当我试图加载它时,我得到了一个404)对不起,关于我应该提到的标题“Chrome extension”。现在我没有得到原始错误,但我得到了另一个错误,我不确定它是否与我的代码有关:Uncaught TypeError:object[object object object]的属性“onopen”不是channel.js第77行的函数。这是否与我的功能(evt)
有关?再次感谢。我不知道这是否相关,但网络选项卡显示GET 200-OK forbind 235.talkgadget.google.com/talkgadget/dch
您需要在处理程序中指定onopen回调。谢谢。我添加了onopen和其他属性,看到了onopen的警报,但没有看到消息的警报。我用最新的代码更新了这个问题。我错过了什么?再次感谢。请确保您使用用于创建令牌的相同客户端id调用send_message。服务器端的一些日志记录将对此有所帮助。
<html>
<head>
<title>Extension Options</title>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
</head>
<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>
<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>