为什么这个 JavaScript 代码只有当我 运行 它在 HTTP 服务器上时才有效?
Why does this JavaScript code only work when I run it on a HTTP server?
我正在尝试构建一个使用 Google 日历 API 的 Chrome 扩展。我试图避免只为了对 Google 日历进行 API 调用而必须设置服务器。我尝试按照此处的示例进行操作:
https://developers.google.com/google-apps/calendar/quickstart/js#step_2_set_up_the_sample
但是该代码要求我有一个 HTTP 服务器 运行ning。为什么只有当我 运行 它在 HTTP 服务器上时该代码才有效?据我所知,它只有 JavaScript 和 HTML,当我 运行 它在我的浏览器本地(使用 file:// 协议)时应该可以工作。我也没有看到任何 CORS 问题。
我可能只设置一个 Heroku 服务器,但我试图理解为什么这个看似客户端的代码需要一个服务器才能 运行!
出于安全原因,某些浏览器会阻止从 file://
URL 加载的网页中的 Javascript 执行某些操作,例如进行 ajax 调用。
因此,由于此代码最终会向日历服务器发出一些 Ajax 调用,因此该代码可能想要确保您的网页不受这些安全限制的限制,因此它建议了一种方法该网页可以从本地网络服务器而不是文件系统加载,因此它不会对使用 file://
URLs.
加载的页面施加任何限制
值得一提的是,应用于 file://
URL 的安全限制是特定于浏览器的(每个浏览器都会自行选择限制内容)。 Chrome 在这方面似乎相当严格(尽管我认为有一个命令行参数可以放宽其中一些限制)。
我正在尝试构建一个使用 Google 日历 API 的 Chrome 扩展。我试图避免只为了对 Google 日历进行 API 调用而必须设置服务器。我尝试按照此处的示例进行操作:
https://developers.google.com/google-apps/calendar/quickstart/js#step_2_set_up_the_sample
但是该代码要求我有一个 HTTP 服务器 运行ning。为什么只有当我 运行 它在 HTTP 服务器上时该代码才有效?据我所知,它只有 JavaScript 和 HTML,当我 运行 它在我的浏览器本地(使用 file:// 协议)时应该可以工作。我也没有看到任何 CORS 问题。
我可能只设置一个 Heroku 服务器,但我试图理解为什么这个看似客户端的代码需要一个服务器才能 运行!
出于安全原因,某些浏览器会阻止从 file://
URL 加载的网页中的 Javascript 执行某些操作,例如进行 ajax 调用。
因此,由于此代码最终会向日历服务器发出一些 Ajax 调用,因此该代码可能想要确保您的网页不受这些安全限制的限制,因此它建议了一种方法该网页可以从本地网络服务器而不是文件系统加载,因此它不会对使用 file://
URLs.
值得一提的是,应用于 file://
URL 的安全限制是特定于浏览器的(每个浏览器都会自行选择限制内容)。 Chrome 在这方面似乎相当严格(尽管我认为有一个命令行参数可以放宽其中一些限制)。