Chrome 中的文件 URL 跨域问题 - 意外

Posted

技术标签:

【中文标题】Chrome 中的文件 URL 跨域问题 - 意外【英文标题】:File Url Cross Domain Issue in Chrome- Unexpected 【发布时间】:2011-08-28 23:33:36 【问题描述】:

问题在于 Chrome 在使用文件 url 时抛出跨域错误

我使用对象标记将 svg 文档嵌入到 html 中,数据属性以相对路径的形式出现,在 onload 事件时,我想使用 getSVGDocument() 获取 SVGDocument。

我正在使用文件 url 访问 html 文件,当调用 getSVGDocument 时,Chrome 会出现跨域错误。 Chrome 实际上确实嵌入了 SVG,但 getSVGDocument 没有返回 SVG 的 DOM

Chrome 错误是 “不安全的 javascript 尝试从带有 URL file:///C:/MyFiles/website/Dir1/index.html 的框架访问带有 URL file:///C:/MyFiles/website/Dir1/a.svg 的框架 域、协议和端口必须匹配。”

您可能会看到 html 和嵌入文档 svg 的基本路径相同,那么为什么 Chrome 会抛出此错误?

【问题讨论】:

从文件 URL 加载的文档具有特殊的安全限制,可阻止您碰巧保存到桌面的恶意脚本做坏事。尝试运行本地网络服务器或将文件上传到“适当的”网络服务器,看看是否仍然出现错误。 Web 服务器是我想要避免的。 @robertc 你能澄清从相对文件 url 加载 svg 的安全问题吗(相对图像、css、js 似乎都可以正常工作)?我只遇到这个错误: Unsafe attempt to load URL file:///Users/ericbloch/repos/set/shapes.svg#oval from frame with URL file:///Users/ericbloch/repos/set/index.html .域、协议和端口必须匹配。 @EricBloch 你得问问 Chrome 的开发者,通常是和iframe有关的 我在这里问了一个错误:code.google.com/p/chromium/issues/detail?id=512542(目前与 iframe 无关)。 【参考方案1】:

您遇到了 Chrome 的跨域/文件安全限制。

您可以按照Disable same origin policy in Chrome 中的说明和How can access and the origin policy in chrome as I'm not using a server 中有关如何在关闭这些功能的情况下启动 Chrome 的详细信息来禁用此功能。

但请注意:出于某种原因,它们被称为“安全限制”,因此在浏览 3rd 方网站时不要应用此限制。 在正常浏览网页时关闭此功能非常危险例如,关闭此功能后,我现在可以代表您向 gmail.com、facebook 等网站发出请求.com 和 yourbank.com,您的 cookie 将被设置,允许我伪装成您自己。

如果你仍然需要这个,你需要运行带有--disable-web-security标志的chrome:

chrome --disable-web-security # unix/linux only

如果您需要有关如何应用标志的跨操作系统说明,请参阅http://www.chromium.org/developers/how-tos/run-chromium-with-flags。

【讨论】:

您帖子中的两个 SO 链接非常有用,涵盖了与出于开发目的更改 chrome 安全设置相关的所有可能性。 +1

以上是关于Chrome 中的文件 URL 跨域问题 - 意外的主要内容,如果未能解决你的问题,请参考以下文章

从 ie/firefox/chrome 中的 jquery 调用跨域 .net 方法

来自本地 HTML 文件的 WebView Javascript 跨域

从本地文件发出对 XML 的跨域请求

Ajax请求:本地跨域的问题

chrome 扩展中的跨域 XMLHttpRequest

chrome中的跨域ajax POST