【问题标题】:Difference in launching Angular JS application in Chrome and Safari?在 Chrome 和 Safari 中启动 Angular JS 应用程序的区别?
【发布时间】:2015-05-21 07:37:55
【问题描述】:

团队,

我正在开发 Angular JS 应用程序。当我想测试应用程序时,我过去只是将应用程序从文件系统直接启动到浏览器中。网址就像

file:///Users/easwar/AngularApp/index.html

当我需要在 Chrome 中启动应用程序时,我需要使用以下命令从终端打开浏览器

open -a Google\ Chrome --args --disable-web-security -–allow-file-access-from-files

为了避免下面的错误。

"XMLHttpRequest 无法加载,跨域请求是 仅支持协议方案:http、data、chrome、 chrome-extension、https、chrome-extension-resource。”

但令人惊讶的是,该应用在 Safari 中运行良好,无需执行任何此类操作。

我想知道这些浏览器行为之间的区别是什么?为什么它在 Safari 中工作,而在 Chrome 中不工作?

【问题讨论】:

  • 您是否在 Safari 的开发者菜单中设置了Disable Local File Restrictions
  • 在安装 Batarang 插件时遇到了与 Chrome 相同的问题。如果没有合适的网络服务器,它就无法工作。
  • 如果可能,创建一个本地服务器,以便您可以通过“localhost/YourWebsite”访问它。
  • @RGraham 禁用本地文件限制 - 启用和禁用没有任何区别。
  • 这是在 Mac 还是 Windows 上?

标签: javascript angularjs google-chrome safari cross-domain


【解决方案1】:

简而言之:谷歌浏览器不喜欢本地交叉调用。 更多可以在这里找到:Cross origin requests are only supported for HTTP but it's not cross-domain

这是 Google 的隐私和安全政策:他们尽量避免风险,本地文件调用似乎就是其中之一。

在此处阅读有关跨源请求及其在 Google Chrome 中的处理方式的更多信息:https://developer.chrome.com/extensions/xhr

如果您不想使用这些控制台命令,您可能需要寻找一个网络服务器来托管它(或本地网络服务器)。

【讨论】:

  • 我认为 OP 知道这一点。我认为问题是,为什么 Safari 允许它(至少在 OP 的实例中......我无法想象它允许)而 Chrome 不允许。
  • 这是浏览器如何处理安全性的问题,遗憾的是与代码无关。 Safari 决定让它通过,谷歌没有。
  • @Jordumus 如果我认为这是 Safari 的默认行为(因为我没有对其设置做任何事情)。不是害处吗?那么,我们可以得出结论 Chrome 更安全吗?
  • 这真的取决于你所说的“安全”:调用本地系统上的文件是否有风险?不是真的.. 但是如果你把那个代码放在一个网站上.. 并且该网站试图调用每个访问者的本地系统上的一个文件?现在:Safari 也将阻止第二部分,因为它确实是一个“交叉调用”(从服务器到本地计算机)。 Chrome 只是更严格一些:本地到本地的呼叫也被阻止。
  • 对不起,原始海报,即你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
相关资源
最近更新 更多