我正在整理一些演示页面,而我想演示的一件事涉及通过后续处理动态获取HTML片段。因此,我得到了如下简单的jQuery代码:
$('#target').load('./content_fragment.html', function() { $(this).doSomething(); });
我通过file:// URL执行所有操作,因为整个过程都是我(可能)通过拇指驱动器或其他工具运行的演示的一部分。因此,“ content_fragment.html”只是另一个本地文件,就像包含该代码的主页一样。
现在,这一切都可以在Firefox或Safari上正常运行,而相对URL的 其他 用法在Chrome中也可以正常运行(iframe“ src” URL,图像,脚本,css等),但是Chrome不会关注那些“ .load” ()”的要求。如果我压缩内容并将其部署到Web服务器,然后通过其“ http:” URL进行访问,则Chrome可以正常工作。如果无法使用,我在Chrome控制台中看不到任何错误;它只是不获取内容。我已经在Linux和XP上的Chrome浏览器中进行了尝试,结果相同。(并且Safari或Firefox到相同的文件:// URL总是按照我的期望并加载内容。)
所以我的问题是,这种怪异只是Chrome的古怪之处,还是XMLHttpRequests和file:// URL本质上存在疑问?换句话说,Chrome浏览器在做 正确的 事情,意味着其他浏览器都坏了吗?
您可以--allow-file-access-from-files在启动chrome时添加到命令行以禁用此安全功能:)
--allow-file-access-from-files
是虫子吗?也许(也许不是),发生的事情是它没有被file://视为单个域,对其他文件的请求被视为不同的域,因此被SOP规则阻止。Chrome / Chromium开发人员可以选择它是否正确,这取决于您的观点。
file://
在Google代码的Chrome问题部分中对此进行了大量讨论,您可能会在此处和此处找到感兴趣的讨论。