簡體   English   中英

為什么此 JavaScript 代碼僅在我在 HTTP 服務器上運行時才有效?

[英]Why does this JavaScript code only work when I run it on a HTTP server?

我正在嘗試構建一個使用 Google Calendar API 的 Chrome 擴展程序。 我試圖避免僅僅為了對 Google 日歷進行 API 調用而設置服務器。 我嘗試按照此處的示例進行操作:

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

但是該代碼要求我運行 HTTP 服務器。 為什么該代碼僅在我在 HTTP 服務器上運行時才有效? 據我所知,它只有 JavaScript 和 HTML,當我在瀏覽器上本地運行它時應該可以工作(使用 file:// 協議)。 我也沒有看到任何 CORS 問題。

我可能只是設置了一個 Heroku 服務器,但我試圖理解為什么這個看似客戶端的代碼需要一個服務器來運行!

出於安全原因,某些瀏覽器會阻止從file:// URL 加載的網頁中的 Javascript 執行某些操作,例如進行 ajax 調用。

因此,由於此代碼最終會向日歷服務器發出一些 Ajax 調用,因此該代碼可能希望確保您的網頁不受這些安全限制的限制,因此它提出了一種可以從本地加載網頁的方法web 服務器,而不是文件系統,因此它不會對加載有file:// URL 的頁面施加任何限制。

值得一提的是,應用於file:// URL 的安全限制是特定於瀏覽器的(每個瀏覽器都有自己的選擇來限制什么)。 Chrome 在這方面似乎相當嚴格(盡管我認為有一個命令行參數可以放寬其中一些限制)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM