Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 为什么谷歌应用引擎频道API(jsapi)无法加载到Chrome扩展中?_Google App Engine_Google Chrome_Google Chrome Extension - Fatal编程技术网

Google app engine 为什么谷歌应用引擎频道API(jsapi)无法加载到Chrome扩展中?

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

我正在Chrome扩展中使用Channel API

第页上写着

在任何JavaScript代码之前,在html页面中包含以下内容 指的是:

更新

我添加了
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 for
bind 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>