gapi.client.load not working



我有以下代码,这应该是使用google-api javascript客户端的一个简单示例,并简单地显示硬编码缩短URL的长格式URL:

<script>
  function appendResults(text) {
    var results = document.getElementById('results');
    results.appendChild(document.createElement('P'));
    results.appendChild(document.createTextNode(text));
  }
  function makeRequest() {
    console.log('Inside makeRequest');
    var request = gapi.client.urlshortener.url.get({
      'shortUrl': 'http://goo.gl/fbsS'
    });
    request.execute(function(response) {
      appendResults(response.longUrl);
    });
  }
  function load() {
    gapi.client.setApiKey('API_KEY');
    console.log('After attempting to set API key');
    gapi.client.load('urlshortener', 'v1', makeRequest);
    console.log('After attempting to load urlshortener');
  }
</script>
<script src="https://apis.google.com/js/client.js?onload=load"></script>

除非使用实际的API键而不是文本"API_key"。

控制台输出很简单:

在尝试设置API密钥之后

在尝试加载urlshortener 之后

但我从来没有看到"Inside makeRequest",它在makeRequest函数中,它是对gap.client.load调用的回调函数,这让我相信该函数不起作用(或无法完成)。

有人能解释为什么会这样,以及如何解决吗?

提前谢谢。

花了几个小时在谷歌上搜索这个问题后,我发现问题是因为我在本地机器上运行这个文件,而不是在服务器上。

当您在chrome上运行上述代码时,您会在开发人员控制台中收到此错误"无法将消息发布到文件://。收件人的原点为null。"

出于某种原因,javascript仅在实际服务器或类似XAMPP或WAMP的服务器上运行时加载。

如果有任何专家能够解释为什么会发生这种情况,那将是一件非常值得学习的事情。

希望这能帮助其他像我这样的小人物:D

简短回答(http://code.google.com/p/google-api-javascript-client/issues/detail?id=46):

The JS Client does not currently support making requests from a file:// origin.

答案很长(http://en.wikipedia.org/wiki/Same_origin_policy):

The behavior of same-origin checks and related mechanisms is not well-defined
in a number of corner cases, such as for protocols that do not have a clearly 
defined host name or port associated with their URLs (file:, data:, etc.). 
This historically caused a fair number of security problems, such as the 
generally undesirable ability of any locally stored HTML file to access all 
other files on the disk, or communicate with any site on the Internet.

相关内容

  • 没有找到相关文章

最新更新