为什么这个JavaScript代码只在我在HTTP服务器上运行时才有效?

时间:2016-03-14 17:59:44

标签: javascript api http server google-calendar-api

我正在尝试使用Google Calendar API构建Chrome扩展程序。我试图避免设置服务器只是为了对Google日历进行API调用。我试着按照这里的例子:

https://developers.google.com/google-apps/calendar/quickstart/js#step_2_set_up_the_sample

但是该代码要求我运行HTTP Server。为什么该代码仅在我在HTTP服务器上运行时才有效?从我所看到的,它唯一的JavaScript和HTML,当我在浏览器本地运行它时(使用file://协议)应该可以工作。我也没有看到任何CORS问题。

我可能只是设置一个Heroku服务器,但我试图理解为什么这个看似客户端的代码需要运行服务器!

1 个答案:

答案 0 :(得分:1)

某些浏览器会阻止从file://网址加载的网页中的Javascript出于安全原因而执行某些操作,例如进行ajax调用。

因此,由于此代码最终会向日历服务器发出一些Ajax调用,因此代码可能希望确保您的网页不受这些安全限制的限制,因此它建议可以加载网页的方式从本地Web服务器而不是文件系统,因此它不会对加载file:// URL的页面施加任何限制。

值得一提的是,适用于SET @kisaranmirip=maxdifference; SET @current_id=tmid; SET @cari=caritext; SET @ret=(SELECT indonesian FROM tm WHERE tm_id<tmid ORDER BY damlevlim(@cari, english,maxdifference) LIMIT 1); UPDATE babel.tm SET indonesian=@ret WHERE tm_id=tmid 网址的安全限制是特定于浏览器的(每个浏览器都可以自行选择限制内容)。 Chrome在这方面似乎相当严格(尽管我认为有一个命令行参数可以放松这些限制)。